Я пытаюсь автоматизировать сеанс gdb с помощью --command
флага. Я пытаюсь установить точку останова для функции в разделяемой библиотеке (эквивалент DLL в Unix). Мой cmds.gdb выглядит так:
set args /home/shlomi/conf/bugs/kde/font-break.txt
b IA__FcFontMatch
r
Однако я получаю следующее:
shlomi: ~ / progs / bugs-external / kde / font-break $ gdb --command = cmds.gdb ... GNU gdb 6.8-2mdv2009.0 (выпуск Mandriva Linux 2009.0) Авторское право (C) 2008 Free Software Foundation, Inc. Лицензия GPLv3 +: GNU GPL версии 3 или новее Это бесплатное программное обеспечение: вы можете изменять и распространять его. НИКАКИХ ГАРАНТИЙ в той степени, в которой это разрешено законом. Типа "показать копирование" и "показать гарантию" для подробностей. Этот GDB был настроен как "i586-mandriva-linux-gnu" ... (символы отладки не найдены) Функция «IA__FcFontMatch» не определена. Сделать точку останова отложенной при будущей загрузке разделяемой библиотеки? (y или [n]) [ответил N; ввод не с терминала]
Так что точка останова в конце концов не устанавливается. Как я могу установить по умолчанию ответ «y», чтобы установить точки останова при ожидающей будущей загрузке разделяемой библиотеки?
Я вспоминаю, что я мог что-то сделать, но не могу вспомнить что.
Ответы:
Отвечая самому себе, я хотел бы дать ответ, который мне кто-то дал в IRC:
Таким образом, установка отложенной точки останова делает свое дело; он используется,
cmds.gdb
например, напримерset breakpoint pending on break <source file name>:<line number>
источник
Program received signal SIGILL, Illegal instruction
. Я получаю точки останова из файла, и у меня есть,set breakpoint pending on
поскольку некоторые из моих точек останова находятся в библиотеке, которую загружает программа. Если я добавляю точки останова вручную, ошибки не возникает. Кто-нибудь еще сталкивается с подобной проблемой?ОТ: В терминале отладка Caja в одну строку будет выглядеть так:
gdb -ex "set breakpoint pending on" -ex "break gdk_x_error" -ex run --args caja --sync
источник
-ex
у меня не сработало. Мне пришлось поместить команды в файл tmp и позвонить с помощью:gdb -x /tmp/gdb.commands myexecutible
Без символов.
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
источник