2

我有一个可以很好编译的 C 语言大程序,但是当我运行它(./a.out)时,我得到:总线错误 10!我使用 gdb 调试器来跟踪内存错误,但奇怪的是程序在 gdb 内正常完成。这种行为可以以某种方式解释,我现在将如何调试我的代码?

4

1 回答 1

2

在某些操作系统上,gdb 将在 gdb 中以不同方式加载程序。我知道在 MacOS 上 gdb 将禁用一些地址空间布局随机化,这会改变共享库的重定位方式。在某些操作系统上,gdb 将加载比正常程序执行更多的部分或加载具有更广泛权限的那些部分(不可执行的内存可能在 gdb 下是可执行的,或者只读将变为可写)。

最好的办法是捕获问题的核心转储并从那里继续调试。Valgrind 也擅长捕捉这类错误。

于 2012-09-17T10:33:19.930 回答