我正在开发一个运行在小型 Linux 嵌入式设备上的应用程序(约32MB RAM)。不幸的是,我的应用程序最近变得太大了,无法在 GDB 下运行。有没有人知道任何好的、轻量级的调试方法,可以在嵌入式 Linux 中使用?即使能够查看线程的堆栈跟踪,也会非常有帮助。需要注意的是,这个应用程序是用 C++ 编写的,并且运行多个线程,所以 gdbserver 不适用于多线程应用程序。谢谢提前!Maha
info threads
thread <thread number from info threads>
切换到该执行线程。
thread apply XXX <command>
运行在由XXX指定的线程上,也可以是“all”。因此,如果您想要所有正在运行的线程的回溯,请执行以下操作:
thread apply all bt
一旦您进入给定线程的执行流程中,所有典型的命令都会像在单线程进程中一样工作。
我听说有人使用模拟器(例如QEMU)运行应用程序,然后在其中运行GDB(或类似valgrind的工具)进行调试。虽然听起来很痛苦,但如果能够成功....
您可以尝试使用libunwind(获取堆栈跟踪信息)和printf风格的日志记录,是否能够解决问题呢?
串口打印是我能想到的最轻量级的方式~~~ 在主机PC上很容易看到,并且应用程序内部的代码也非常简单和轻巧~~
如果您没有串口,我们曾经使用GPIO端口并模拟了一个串口。它完美地工作,但速度有点慢 :-( ~~~
你为什么要自己构建调试器呢?我正在开发一个使用ARM处理器(AT91SAM926x)的Linux系统,我们正在使用CodeSourcery提供的编译器和调试器。我认为他们还没有发布带有GDB 7版本的工具,但是我正在使用gdbserver工具调试多线程C++应用程序,而且没有遇到任何问题。
Gdbserver确实可以与多线程应用程序一起使用。但是,您需要为您的主机编译一个交叉目标调试器,以便将其与目标gdb配合使用。
请参阅本文,了解如何详细描述: