代码之家  ›  专栏  ›  技术社区  ›  Jason Machacek

嵌入式Linux上的轻量级调试

  •  5
  • Jason Machacek  · 技术社区  · 15 年前

    我应该提到,这个应用程序是用C++编写的,运行多个线程,所以GDBServer是不允许的,因为它不适用于多线程应用程序。

    提前感谢,,

    马哈

    5 回复  |  直到 15 年前
        1
  •  4
  •   asm    15 年前

    gdbserver肯定能与多线程应用程序配合使用,我现在正在与>25个线程,我们一直使用gdbserver。

    info threads 
    

    thread <thread number from info threads>  
    

    切换到该执行线程。

    thread apply XXX <command>  
    

    在XXX指定的线程上运行,也可以是“全部”。因此,如果您想从所有正在运行的线程返回跟踪,那么

    thread apply all bt
    

        2
  •  2
  •   Brooks Moses    15 年前

    我听说有人做过一些黑客行为,比如在QEMU之类的模拟器中运行应用程序,然后在上面运行GDB(或valgrind之类的东西)。这听起来很痛苦,但如果有效的话。。。。

    使用libunwind(获取堆栈跟踪)和printf风格的日志记录,您会有什么收获吗?

        3
  •  1
  •   Alphaneo    15 年前

    串口打印是我能想到的最轻的重量~~~ 在主机PC中很容易看到,应用程序中的代码简单而轻量级~~

    如果您没有串行端口,一旦我们使用GPIO端口并使用它模拟串行端口。它工作得非常好,但有点慢:——~~~

        4
  •  0
  •   Anders Holmberg    15 年前

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

        5
  •  0
  •   mikelong    15 年前

    Gdbserver确实可以处理多线程应用程序。但是,您确实需要为主机编译一个跨目标调试器,以使其与目标gdb一起工作。

    Remote cross-target debugging with GDB and GDBserver