Добавление списков команд останова в GDB, управляемых из сценария Python

Я использую Python для управления GDB с помощью командных команд. Вот как я называю GDB:

$ gdb --batch --command=cmd.gdb myprogram 

Список cmd.gdb содержит только строку, вызывающую скрипт Python

 source cmd.py 

Сценарий cmd.py пытается создать cmd.py останова и список подключенных команд

 bp = gdb.Breakpoint("myFunc()") # break at function in myprogram gdb.execute("commands " + str(bp.number)) # then what? I'd like to at least execute a "continue" on reaching breakpoint... gdb.execute("run") 

Проблема в том, что я не понимаю, как подключить любые команды GDB к точке останова из сценария Python. Есть ли способ сделать это, или я пропустил намного более простой и очевидный способ автоматического выполнения команд, поддерживающих точку останова?

2 Solutions collect form web for “Добавление списков команд останова в GDB, управляемых из сценария Python”

может использоваться дефолт от GDB 7.7.1:

 gdb.execute('file a.out', to_string=True) class MyBreakpoint(gdb.Breakpoint): def stop (self): gdb.write('MyBreakpoint\n') # Continue automatically. return False # Actually stop. return True MyBreakpoint('main') gdb.execute('run') 

Документировано по адресу: https://sourceware.org/gdb/onlinedocs/gdb/Breakpoints-In-Python.html#Breakpoints-In-Python

См. Также: Как выполнить скрипт gdb (с помощью python)? Например, добавьте контрольные точки, запустите, какой контрольный пункт мы ударили?

Я думаю, что это, вероятно, лучший способ сделать это, а не использовать «список команд» GDB.

 bp1 = gdb.Breakpoint("myFunc()") # Define handler routines def stopHandler(stopEvent): for b in stopEvent.breakpoints: if b == bp1: print "myFunc() breakpoint" else: print "Unknown breakpoint" gdb.execute("continue") # Register event handlers gdb.events.stop.connect (stopHandler) gdb.execute("run") 

Возможно, вы также можете подклассифицировать gdb.Breakpoint, чтобы добавить подпрограмму «handle» вместо выполнения проверки равенства внутри цикла.

  • исключение python <type 'exceptions.ImportError'> Нет модуля с именем gdb:
  • gdb довольно печатает с python рекурсивную структуру
  • Отладка: переход через скрипт Python с помощью gdb?
  • как отладить ошибку сегментации pyside в virtualenv?
  • python-dbg не может найти Py_InitModule4 при отладке
  • Печатная версия GDB ImportError: нет модуля с именем «принтеры»
  • Довольно принтеры для карт, бросающих ошибку типа
  • gdb python scripting: где `parse_and_eval` ушел?
  • Python - лучший язык программирования в мире.