我正在尝试将gdb与emacs一起使用。我试图调试的库是由进程加载的,不能直接运行。因此,我通过在gdb中使用attach命令来附加到进程。当我从shell使用gdb时,附加到进程并设置断点可以很好地工作,但当我在emacs中使用gdb(通过按M-x gdb或M-x gud gdb)时,它无法设置断点。它显示了一个错误,上面写着"无法在0x7efb04访问内存"。我使用的是emacs 23.1.1。
以下是我遵循的流程的分解:
- 按
M-x gdb
或M-x gud-gdb
在emacs内启动gdb - 输入使用调试符号生成的可执行文件的名称
- 键入"attach[PID]"将gdb附加到正在运行的进程
- 通过键入:filename:行号设置断点
最后一步给了我一个错误,上面写着"无法在0x7efb04访问内存"。
你知道为什么会这样吗?
编辑:我在使用DDD(GDB的UI)时也遇到了同样的错误。所以我想这不是emacs特有的问题。
您是否使用调试信息进行了编译?你有显示问题的代码吗?其他IDE也会发生这种情况吗?
我想明白了。问题出在步骤2。输入使用调试符号生成的可执行文件的名称会导致问题。相反,只需启动GDB并连接到进程就可以了。我不确定这是否是预期的行为。
在DDD中,必须先打开带有调试符号的可执行文件,然后才能连接到进程。我不知道如何在DDD中避开它。