FastNetMon

Показаны сообщения с ярлыком Отладка. Показать все сообщения
Показаны сообщения с ярлыком Отладка. Показать все сообщения

воскресенье, 13 июня 2010 г.

Ловля бага в PHP

Пост моего товарища, прошу любить и жаловать http://habrahabr.ru/blogs/php/95656/ !

понедельник, 11 января 2010 г.

А gdb занятная таки штука

Ставим
apt-get install gdb -y


После этого пересобираем требующую отладки программу с ключом gcc -g (включается сохранение отладочной информации).

Запускаем отладчик и запускаем программу посредством команды run:

gdb ./src/daemon/.libs/somebinary
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu"...
(gdb) run


Теперь, если программа зависла или остановилась на каком-то системном вызове можно ее прервать командой CTRL+C и посмотреть бэктрейс:
backtrace


И в результате будет показано что-то в виде следующего:

#0 0x00007f8a415e7c93 in select () from /lib/libc.so.6
#1 0x0000000000402b49 in _msg () at file.c:708
#2 0x0000000000402f64 in main (argc=1, argv=0x7fff0e99b608) at file.c:1119


Также можно сразу посмотреть код, на котором произошел останов, используя команду frame и номер, взятый после # в выдаче backtrace (либо просто введя команду list - она покажет несколько строк до строки останова и несколько после нее):

(gdb) frame 1
#1 0x0000000000402b49 in _msg () at file.c:708
708 if (select(sk_max + 1, &fds, NULL, NULL, NULL) < 0) {



Как видите, очень удобно и не надо полтонны printf ов и теперь просто проследуем на 708 строку файла и смотрим, в чем причина остановки :)

Выходить из отладчика по CTRL+D.

По информации с: http://www.unknownroad.com/rtfm/gdbtut/gdbtoc.html