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