我正在开发一个在基于Linux的小型SBC(~32MB RAM)上运行的应用程序。可悲的是,我的应用程序最近变得太大而无法在GDB下运行。有没有人知道我可以在嵌入式Linux中使用的任何好的,轻量级的调试方法?即使能够查看线程的堆栈跟踪也非常有用。
我应该提一下,这个应用程序是用C ++编写的,并运行多个线程,所以gdbserver是不行的,因为它不适用于多线程应用程序。
提前致谢,
玛哈
答案 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一起使用。
有关如何执行此操作的详细说明,请参阅此文章: