【发布时间】:2015-04-05 04:43:27
【问题描述】:
我正在使用 GDB 在 Yosemite OSX 上调试程序。在断点处,我想使用内部函数打印出一些信息,但即使使用微不足道的函数,我也会收到 SIGBUS 错误。例如:
Breakpoint 1, ...
(gdb) print my_info_function()
Program received signal SIGBUS, Bus error.
<function called from gdb>
The program being debugged was signaled...
my_info_function 在哪里:
const char *my_info_function() {
return "hello";
}
另外,如果我用gdb运行程序,然后在它运行的时候中断它,那么,不管中断是在上述断点之前还是之后,print my_info_function()都可以正常工作。
这个问题似乎是在升级到 Yosemite(从 Lion)后开始出现的,所以我倾向于认为它与此有关。我尝试使用不同的编译器(clang、gcc-4.9、brew vs macports),并使用/重新安装/重建不同的 gdb(brew、macports 以及this brew gdb version),但都无济于事。
关于如何解决此问题的任何建议?我正在使用 emacs + gdb 并希望保持这种状态。我可能对 emacs + lldb 没问题,但似乎关于是否/何时支持它存在一些争论。
【问题讨论】:
-
单步执行
main是否有效?或者只是当你调用一个函数时? -
在 main 首次启动和多线程之前工作。仔细观察,似乎只有在子线程上运行的代码处触发断点时才能重现。值得一提的是,在 lldb 中进行的相同调试练习按预期进行(没问题)。
标签: c debugging emacs gdb osx-yosemite