FastNetMon

Monday, 11 January 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

No comments :

Post a Comment

Note: only a member of this blog may post a comment.