22.04.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" установить следующее состояние:
Также можно менять состав данных в столбцах, в частности, вывести номер используемого процессорного ядра:
[ Хронологический вид ]Комментарии
Войдите, чтобы комментировать.