Интерфейс Python, экспортируемый GDB, позволяет вам делать много вещей. Может быть, что-то вроде этого подойдет вашим требованиям:
import gdb
CMD_FCT = "gdb_run"
CMD_NAME = "str"
class GdbRunBreakpoint(gdb.Breakpoint):
def __init__(self):
gdb.Breakpoint.__init__(self, CMD_FCT, internal=1)
self.silent = True
def stop(self):
cmd = gdb.parse_and_eval(CMD_NAME).string()
gdb.execute(cmd)
return False
GdbRunBreakpoint()
(просто напишите, чем в файле, и получите его из вашего .gdbinit
файла)
и на стороне приложения:
void gdb_run(char *str) {}
int main () {
gdb_run("where");
}
Я думаю, что код прост, но, как я упоминал в https://stackoverflow.com/a/8884512/341106,, не все разрешено в обратном вызове stop
, GDB находится в промежуточном состоянии, но многие вещи будут работать, как и ожидалось.
РЕДАКТИРОВАТЬ: Само собой разумеется, это не будет работать, если ваше приложение не скомпилировано с символами отладки!