嵌入式Linux上的轻量级调试

时间:2009-12-01 23:41:24

标签: c++ linux debugging embedded embedded-linux

我正在开发一个在基于Linux的小型SBC(~32MB RAM)上运行的应用程序。可悲的是,我的应用程序最近变得太大而无法在GDB下运行。有没有人知道我可以在嵌入式Linux中使用的任何好的,轻量级的调试方法?即使能够查看线程的堆栈跟踪也非常有用。

我应该提一下,这个应用程序是用C ++编写的,并运行多个线程,所以gdbserver是不行的,因为它不适用于多线程应用程序。

提前致谢,

玛哈

5 个答案:

答案 0 :(得分:4)

gdbserver肯定适用于多线程应用程序,我正在使用> 25个线程处理嵌入式项目,我们一直使用gdbserver。

info threads 

列出系统中的所有线程

thread <thread number from info threads>  

切换到该执行线程。

thread apply XXX <command>  

在XXX指定的线程上运行,也可以是“全部”。因此,如果您想要所有正在运行的线程的后向跟踪

thread apply all bt

一旦进入给定线程的执行流程,所有典型命令就像在单个线程进程中一样工作。

答案 1 :(得分:2)

我听说过人们在像QEMU这样的模拟器中运行应用程序,然后运行GDB(或类似valgrind之类的东西)。这听起来很痛苦,但如果它有效......

你可以在任何地方使用libunwind(获取堆栈跟踪)和printf样式的日志记录吗?

答案 2 :(得分:1)

串口打印是我能想到的最轻量级的~~~ 在主机PC中轻松查看,并在您的应用程序内部使用简单轻巧的代码~~

如果您没有串口,我们使用GPIO端口并使用它模拟串口。它工作得很好,但有点慢:-( ~~~

答案 3 :(得分:0)

你有没有建立自己的调试器的原因?我正在使用ARM处理器(AT91SAM926x)开发Linux系统,我们正在使用CodeSourcery的编译器和调试器。我不认为他们已经发布了GDB 7的版本,但我正在使用gdbserver工具调试多线程C ++应用程序而没有任何问题。

答案 4 :(得分:0)

Gdbserver确实适用于多线程应用程序。但是,您确实需要为主机编译交叉目标调试器,以使其与目标gdb一起使用。

有关如何执行此操作的详细说明,请参阅此文章:

Remote cross-target debugging with GDB and GDBserver