gpt4 book ai didi

c - 从调试程序向 gdb 发送命令

转载 作者:太空狗 更新时间:2023-10-29 15:36:38 26 4
gpt4 key购买 nike

是否可以从被调试的程序中控制gdb?我希望有一个库可以帮助解决这个问题,最好是使用诸如 gdb_sendcmd("bt") 之类的 API,但我可以接受诸如通过套接字连接到本地 gdb 之类的东西。

主要用例是以编程方式添加数据断点,以监控下一次修改特定内存地址的时间。目标语言自然是 C;适用于它的任何内容都可以在 C++ 和 Objective-C 中重用。


Answer from Employed Russian已经解决了我的直接问题,但我仍然很想知道如何从调试程序中以编程方式运行 GDB 命令。如果我可以简单地向项目中添加代码而不是为 GDB 编写额外的启动命令来创建带有附加命令的断点,它可能会加快一些调试。

因此,如果有一种以编程方式运行命令的方法,我仍然很想听听它 ;)

最佳答案

GDB 导出的 Python 接口(interface)允许你做很多事情。也许这样的事情会符合您的要求:

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()

(只需将 than 写在一个文件中,然后从您的 .gdbinit 文件中获取它)

在应用端:

void gdb_run(char *str) {}


int main () {
gdb_run("where");
}

我认为代码很简单,但正如我在 https://stackoverflow.com/a/8884512/341106 中提到的那样,在 stop 回调中并非所有内容都被允许,GDB 处于中间状态,但很多事情都会按预期进行。

编辑:不用说,如果您的应用程序未使用调试符号编译,这将不起作用!

关于c - 从调试程序向 gdb 发送命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9026279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com