22.04.2016 Некоторые методы отладки
Boldenkov (обсуждение | вклад) (Новая страница: «<summary [ hidden ] > Памятка по способам отладки </summary> {{TOCright}} == Вылов segfault'ов в gdb == Запускаем п…») |
Korogodin (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии 1 участника) | |||
Строка 1: | Строка 1: | ||
<summary [ hidden ] > | <summary [ hidden ] > | ||
+ | |||
+ | [[File:20160422_htop_1.png|400px|center]] | ||
Памятка по способам отладки | Памятка по способам отладки | ||
Строка 99: | Строка 101: | ||
[[File:20160422_htop_1.png|400px]] | [[File:20160422_htop_1.png|400px]] | ||
+ | |||
+ | Кстати, из списка видно, что запущено два экземпляра receiver. Один работает, другой - нет. | ||
Однако по-умолчанию она не выводит названия потоков внутри процесса. Нужно войти в настройки, нажав F2, и во вкладке "Display options" установить следующее состояние: | Однако по-умолчанию она не выводит названия потоков внутри процесса. Нужно войти в настройки, нажав F2, и во вкладке "Display options" установить следующее состояние: | ||
Строка 107: | Строка 111: | ||
[[File:20160422_htop_3.png|400px]] | [[File:20160422_htop_3.png|400px]] | ||
+ | |||
+ | Вот здесь программа подвисла на обработке входного потока протокола srns. | ||
+ | |||
+ | [[File:20160422_htop_4.png|400px]] | ||
+ | |||
+ | {{wl-publish: 2016-04-22 10:41:25 +0300 | Boldenkov }} |
Текущая версия на 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.
[ Хронологический вид ]Комментарии
Войдите, чтобы комментировать.