GDB没有打破SIGSEGV

时间:2010-11-12 03:45:09

标签: linux gdb arm cross-compiling

我正在尝试从x86机箱调试ARM处理器的应用程序。我有些人遵循之前获得开发环境设置的人的指示。我有一个版本的gdbserver已经为ARM处理器进行了交叉编译,似乎允许我通过我的框中的ARM感知gdb连接到它。

我期待当我将gdb附加到崩溃(来自SIGSEGV或类似)的进程时,它将会中断以便我可以检出调用堆栈。

这是一个糟糕的假设吗?我是ARM世界的新手并且是交叉编译的东西,有没有一个很好的资源来开始我缺少的这些东西?

2 个答案:

答案 0 :(得分:1)

所以我假设gdb客户端能够连接到gdbserver并且你能够在正在运行的进程上设置断点吗?

如果以上所有步骤都成功,那么你应该把断点放在崩溃的指令之前,让我们说如果你不知道它在哪里崩溃然后我会说一旦应用程序崩溃,核心就会生成,拿走董事会的核心。然后使用-g选项再次使用debug选项编译源代码(如果二进制文件被剥离)并执行核心的脱机分析。类似下面的内容

gdb binary-name core_file

然后,一旦你得到gdb提示,请给出以下命令

gdb线程应用所有bt

上面的命令将为您提供所有线程的完整回溯,请记住不应该剥离二进制文件,并且所有源代码和共享库的正确路径都应该可用。

您可以在gdb提示符下使用以下命令在线程之间切换

gdb thread thread_number

如果未在板上生成核心文件,则在执行应用程序之前尝试使用下面的命令

ulimit -c unlimited

答案 1 :(得分:1)

它取决于目标系统(使用ARM处理器的系统)。一些嵌入式系统检测到无效的内存访问(例如解除引用NULL),但是对无条件的,无法捕获的系统终止做出反应(我在这样的系统上进行了开发)。目标系统运行的是哪种操作系统?