在 emacs(或 DDD)中使用 gdb 时无法设置断点
我正在尝试将 gdb 与 emacs 一起使用。我尝试调试的库是由进程加载的,无法直接运行。因此,我使用 gdb 内的 Attach 命令附加到该进程。当我从 shell 中使用 gdb 时,附加到进程并设置断点工作正常,但是当我在 emacs 中使用 gdb 时(通过按 Mx gdb 或 Mx gud-gdb),它无法设置断点。它向我显示一个错误,显示“无法访问 0x7efb04 处的内存”。我使用的是 emacs 23.1.1。
以下是我所遵循的过程的细分:
- 按
Mx gdb
或Mx gud-gdb
在 emacs 中启动 gdb。 - 输入使用调试符号构建的可执行文件的名称。
- 输入“attach [PID]”将 gdb 附加到正在运行的进程。
- 通过键入以下内容设置断点:文件名:行号。
最后一步给我一个错误,提示“无法访问 0x7efb04 处的内存”。
有什么想法为什么会发生这种情况吗?
编辑:使用 DDD(GDB 的 UI)时我遇到同样的错误。所以我想这不是 emacs 特定的问题。
I'm trying to use gdb with emacs. The library that I'm trying to debug is loaded by a process and can't be run directly. Hence I attach to the process by using the attach command inside gdb. Attaching to a process and setting breakpoints works fine when I use gdb from a shell, but when I use gdb in emacs (by pressing M-x gdb or M-x gud-gdb), it can't set breakpoints. It shows me an error which says "Can't access memory at 0x7efb04". I'm using emacs 23.1.1.
Here is a breakdown of the process I follow:
- Press
M-x gdb
orM-x gud-gdb
to launch gdb inside emacs. - Enter the name of the executable built with debugging symbols.
- Type "attach [PID]" to attach gdb to a running process.
- Set a breakpoint by typing: filename:line number.
The last step gives me an error which says "Can't access memory at 0x7efb04".
Any ideas why this is happening?
EDIT : I get the same error when using DDD (UI for GDB). So I guess it's not an emacs specific issue.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您是否使用调试信息进行了编译?您有一些显示问题的代码吗?
其他 IDE 中也会出现这种情况吗?
Have you compiled with debug-information? Do you have some code which shows the problem?
Does this happen in other IDEs also?
我想通了。问题出在步骤 2 上。输入使用调试符号构建的可执行文件的名称会导致问题。相反,只需启动 GDB 并附加到进程即可正常工作。我不确定这是否是预期的行为。
在 DDD 中,必须先打开带有调试符号的可执行文件,然后才能附加到进程。我不知道如何在 DDD 中解决这个问题。
I figured it out. The problem is with step 2. Entering the name of the executable built with debugging symbol causes the problem. Instead, just launching GDB and attaching to process works fine. I'm not sure if this is the expected behavior.
In DDD, the executable with debugging symbols has to be opened first before we can attach to process. I don't know how to get around that in DDD.