我正在使用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()都可以正常工作。
这个问题似乎是在升级到优胜美地(从狮子座)后开始出现的,所以我倾向于认为它与此有关。我尝试使用不同的编译器(clang,gcc-4.9,brew vs macports),使用/重新安装/重建不同的gdb(brew,macports,以及this brew gdb version),但都没有成功。
关于如何解决这个问题有什么建议吗?我正在使用emacs+gdb,希望保持这种方式。我可能对emacs+lldb没什么意见,但对于是否/何时支持它似乎有一些争论。

最佳答案

关于如何解决这个问题有什么建议吗?
这看起来像GDB中的一个bug。
您可以尝试从源代码构建GDB,自行调试GDB,并向gdb-patches mailing list发送修补程序,或者只在GDB bugzilla中报告它(并希望其他人修复它)。

09-10 05:21
查看更多