22.04.2016 Некоторые методы отладки
Boldenkov (обсуждение | вклад) (→Просмотр потоков с помощью htop) |
Korogodin (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
<summary [ hidden ] > | <summary [ hidden ] > | ||
− | [[File:20160422_htop_1.png|400px]] | + | [[File:20160422_htop_1.png|400px|center]] |
Памятка по способам отладки | Памятка по способам отладки |
Текущая версия на 13:43, 22 апреля 2016
|
[править] Вылов segfault'ов в gdb
Запускаем программу через gdb
В командной строке gdb пишем "run"
Ждём возникновения segfault'a
Пишем "backtace", видим место возникновения ошибки.
Смотрим стек вызовов, выбираем нужную функцию
Просматриваем внутренние переменные (в Oryx не работает)
[править] Как посмотреть, что делает уже запущенный процесс с помощью strace
Процесс запущен, консоль не доступна.
Смотрим PID
Вызываем strace, смотрим вызовы:
write(1, "main_facq 0 tms 383466821 0 "..., 40) = 40
futex(0x5c898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x5c898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x5c898, FUTEX_WAIT_PRIVATE, 0, NULL) = 0
futex(0x5c898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x5c898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x5c898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x5c898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
write(1, "main_facq 0 tms 383466831 0 "..., 40) = 40
futex(0x5c898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x5c898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x5c898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x5c898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x5c898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x5c898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
futex(0x5c898, FUTEX_WAIT_PRIVATE, 0, NULL) = -1 EAGAIN (Resource temporarily unavailable)
[править] Как посмотреть, что выводится в stdout в уже запущенном процессе
Процесс запущен, консоль не доступна.
Смотрим PID
Вызываем strace, смотрим вызовы: Процесс запущен, консоль не доступна.
Смотрим PID
write(1, "main_facq 0 tms 384016831 0 "..., 40) = 40
write(1, "main_facq 0 tms 384016831 0 "..., 40) = 40
write(1, "main_facq 0 tms 384016842 0 "..., 40) = 40
write(1, "main_facq 0 tms 384016842 0 "..., 40) = 40
[править] Просмотр потоков с помощью htop
Программа htop позволяет выдавать кучу информации.
Кстати, из списка видно, что запущено два экземпляра receiver. Один работает, другой - нет.
Однако по-умолчанию она не выводит названия потоков внутри процесса. Нужно войти в настройки, нажав F2, и во вкладке "Display options" установить следующее состояние:
Также можно менять состав данных в столбцах, в частности, вывести номер используемого процессорного ядра:
Вот здесь программа подвисла на обработке входного потока протокола srns.
[ Хронологический вид ]Комментарии
Войдите, чтобы комментировать.