我正在尝试从x86机箱调试ARM处理器的应用程序。我有些人遵循之前获得开发环境设置的人的指示。我有一个版本的gdbserver
已经为ARM处理器进行了交叉编译,似乎允许我通过我的框中的ARM感知gdb
连接到它。
我期待当我将gdb
附加到崩溃(来自SIGSEGV或类似)的进程时,它将会中断以便我可以检出调用堆栈。
这是一个糟糕的假设吗?我是ARM世界的新手并且是交叉编译的东西,有没有一个很好的资源来开始我缺少的这些东西?
答案 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),但是对无条件的,无法捕获的系统终止做出反应(我在这样的系统上进行了开发)。目标系统运行的是哪种操作系统?