• Страница 1 из 1
  • 1
[Мануал]GDB: отладчик проекта GNU.
keonji
I ♥ S-PB
Переводился этот материал

Автором оригинала является Derex из проекта MaNGOS. http://getmangos.com/community/topic/4579/howto-gdb-debugging/


Привет, этот простой урок показывает, что такое GDB и как его использовать.

Это руководство предполагает, что вы можете включить свой WorldServer, набрав:
Code
worldserver

в консоли.

1. Перед тем, как начать отладку Skyfire вам нужно скомпилировать сервер с отладочной информацией. Чтобы скомпилировать Skyfire с отладочной информацией нужно добавить:
Code
--with-debug-info

когда запускаете
Code
.. / configure

Затем скомпилируйте и установите Skyfire, как обычно.

2. Теперь вы можете запустить Skyfire с GDB, введя это:
Code
gdb worldserver


Тогда вы, скорее всего, увидите что-то вроде этого:

Code
derex@*:~/workspace/SkyFire/build$ gdb worldserver GNU gdb 6.8-debian Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 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)

(gdb) - is the GDB command prompt smile , here you can type some commands, almost like in normal shell.


Теперь после того, как у вас работает GDB, вы можете приказать ему, включить Skyfire:
Code
run


Просто введите это, и если вам повезет, вы увидите загрузку Skyfire.

Хорошо... Вы сделали это, теперь Skyfire работает. Подождите, пока не наступит краш.

3. Когда Skyfire крашнётся вы, скорее всего, увидите это сообщение, или любое аналогичное.
Code
Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x42c5c950 (LWP 9283)] Player (this=0x42c598e0, session=0x0) at ../../../src/game/Player.cpp:265 265 ../../../src/game/Player.cpp: No such file or directory.

    in ../../../src/game/Player.cpp

(gdb)

Now you can type some commands to get information about the crash, and possibly give it to some dev to fix the problem.

Here are the commands that are best to be typed ( or at least I find the most useful for crash report )

shell echo -e "\nCRASH ON" `date` info program shell echo -e "\nBACKTRACE\n" bt shell echo -e "\nBACKTRACE FULL\n" bt full shell echo -e "\nTHREADS\n" info threads shell echo -e "\nTHREADS BACKTRACE\n" thread apply all bt full

Just type them one after another and give the output in your bug report ...


ОК. Это то, что нужно, теперь мы можем думать о том, чтобы автоматизировать весь этот процесс. GDB имеет 2 очень хороших функции:
Code
--batch Exit after processing options.
--command=FILE, -x Execute GDB commands from FILE.


4. Таким образом, вы можете поместить все команды в один файл и дать GDB выполнить его. Допустим, мы засунули это в один файл и назвали его gdb-commands.
Code
run shell echo -e "\nCRASH ON" `date` info program shell echo -e "\nBACKTRACE\n" bt shell echo -e "\nBACKTRACE FULL\n" bt full shell echo -e "\nTHREADS\n" info threads thread apply all bt full


Теперь вы можете начать все с отладчиком:
Code
gdb worldserver --batch -x /path/to/gdb-commands


СОВЕТ!
Вы можете перенаправить стандартный вывод в лог-файл. Я имею в виду следующее:
Code
gdb worldserver --batch -x /path/to/gdb-commands > /some/log/file
Сообщение # 1 отредактировано keonji - Понедельник, 06.02.2012, 16:11
  • Страница 1 из 1
  • 1
Поиск: