22.04.2016 Некоторые методы отладки

Материал из SRNS
Перейти к: навигация, поиск
(Новая страница: «<summary [ hidden ] > Памятка по способам отладки </summary> {{TOCright}} == Вылов segfault'ов в gdb == Запускаем п…»)
 
 
(не показаны 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 ./receiver

В командной строке gdb пишем "run"

>> run

Ждём возникновения segfault'a

 

Пишем "backtace", видим место возникновения ошибки.

>> backtrace

Смотрим стек вызовов, выбираем нужную функцию

>> backtrace

Просматриваем внутренние переменные (в Oryx не работает)

>> print i


[править] Как посмотреть, что делает уже запущенный процесс с помощью strace

Процесс запущен, консоль не доступна.

Смотрим PID

>> ps ax | grep receiver

Вызываем strace, смотрим вызовы:

>> strace -p <PID>
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

>> ps ax | grep receiver

Вызываем strace, смотрим вызовы: Процесс запущен, консоль не доступна.

Смотрим PID

>> strace -p <PID> -e write
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 позволяет выдавать кучу информации.

20160422 htop 1.png

Кстати, из списка видно, что запущено два экземпляра receiver. Один работает, другой - нет.

Однако по-умолчанию она не выводит названия потоков внутри процесса. Нужно войти в настройки, нажав F2, и во вкладке "Display options" установить следующее состояние:

20160422 htop 2.png

Также можно менять состав данных в столбцах, в частности, вывести номер используемого процессорного ядра:

20160422 htop 3.png

Вот здесь программа подвисла на обработке входного потока протокола srns.

20160422 htop 4.png


[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.

Персональные инструменты
Пространства имён

Варианты
Действия
SRNS Wiki
Рабочие журналы
Приватный файлсервер
QNAP Сервер
Инструменты