Як встановити точки зупинки для майбутніх спільних бібліотек за допомогою прапорця команди


93

Я намагаюся автоматизувати сеанс gdb, використовуючи --commandпрапор. Я намагаюся встановити точку зупинки для функції у спільній бібліотеці (Unix-еквівалент DLL). Мій cmds.gdb виглядає так:

set args /home/shlomi/conf/bugs/kde/font-break.txt
b IA__FcFontMatch
r

Однак я отримую таке:

shlomi: ~ / progs / bugs-external / kde / font-breaking $ gdb --command = cmds.gdb ...
GNU gdb 6.8-2mdv2009.0 (випуск Mandriva Linux 2009.0)
Авторське право (C) 2008 Фонд вільного програмного забезпечення, Inc.
Ліцензія GPLv3 +: GNU GPL версії 3 або новішої 
Це безкоштовне програмне забезпечення: ви можете вільно змінювати та розповсюджувати його.
ГАРАНТІЇ в межах, дозволених законом, відсутні. Введіть "показати копіювання"
та "показати гарантію" для деталей.
Цей GDB був налаштований як "i586-mandriva-linux-gnu" ...
(символів налагодження не знайдено)
Функція "IA__FcFontMatch" не визначена.
Зробити точку зупинки в очікуванні при майбутньому завантаженні спільної бібліотеки? (y або [n]) [відповів N; введення не з терміналу]

Тож це не встановлює точку зупинки зрештою. Як я можу зробити за замовчуванням відповідь "y", щоб встановити точки зупинку для майбутнього завантаження спільної бібліотеки?

Я пам’ятаю, що я зміг щось зробити, але не пам’ятаю, що.


Відповіді:


150

Відповідаючи собі, я хотів би дати відповідь, яку мені хтось дав на IRC:

(gdb) з огляду на очікування
дії - Вкажіть дії, які слід виконати в точці трасування
встановити точку зупинки - налаштування певної точки зупинку
set point break pending - встановити поведінку налагоджувача щодо очікуваних точок зупинки
показати точку зупинки - налаштування певної точки зупинку
показати точку зупинки в очікуванні - Показати поведінку відладчика щодо очікуваних точок зупинки

І тому встановлена ​​точка зупинення, яка очікує на виконання, робить фокус; він використовується cmds.gdbяк наприклад

set breakpoint pending on
break <source file name>:<line number>

що врятувало мій бекон при спробі налагодження під Windows 7 за допомогою MinGW, параметр за замовчуванням відрізнявся від того, як у Linux - велике спасибі
bph

З якоїсь причини я отримую цю помилку Program received signal SIGILL, Illegal instruction. Я отримую точки зупинку з файлу, і set breakpoint pending onоскільки у мене деякі точки зупинку знаходяться в бібліотеці, яку програма завантажує. Якщо я додаю точки зупинки вручну, тоді помилки не буде. Хто-небудь ще стикався з подібною проблемою?
brokenfoot

@brokenfoot: Я думаю, вам слід задати своє запитання в новому запитанні верхнього рівня, а не в коментарі до відповіді тут. Так більше людей це помітять. Більше того, ви повинні надати більше інформації про свою систему.
Shlomi Fish

11

ОТ: У терміналі це могло б виглядати так, щоб налагодити Caja в один рядок:

gdb -ex "set breakpoint pending on" -ex "break gdk_x_error" -ex run --args caja --sync

2
Де ви знайшли перемикач "колишній" ?, я не можу знайти жодного посилання на цей параметр у документації (але він працює :))
Gearoid Murphy

-exне працював у мене. Мені довелося помістити команди у файл tmp і зателефонувати за допомогою:gdb -x /tmp/gdb.commands myexecutible
Джейсон Мур

5

Без символів.

objdump -t /lib/libacl.so
SYMBOL TABLE:
no symbols
objdump -T /lib/libacl.so
...
00002bd0 g    DF .text  000000d0  ACL_1.0     acl_delete_entry
...


(gdb) break 0x0002bd0 

(gdb) x/20i acl_delete_entry
0x2bd0 <acl_delete_entry>:      stwu    r1,-32(r1)
0x2bd4 <acl_delete_entry+4>:    mflr    r0
0x2bd8 <acl_delete_entry+8>:    stw     r29,20(r1)
0x2bdc <acl_delete_entry+12>:   stw     r30,24(r1)
0x2be0 <acl_delete_entry+16>:   mr      r29,r4
0x2be4 <acl_delete_entry+20>:   li      r4,28972
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.