【发布时间】:2012-03-21 07:25:50
【问题描述】:
我发现自己不得不在几乎没有任何调试工具的情况下调试 Qt 应用程序:该应用程序似乎开始使用越来越多的 CPU,因为它一次又一次地运行相同的操作;几个小时后,CPU 完全饱和。
应用程序在 gdb 似乎无法工作的 ARM Linux 嵌入式设备上运行,可能是提供的工具链难以发现问题。 strace 似乎只报告计时器活动(这是一个 OpenGL 应用程序,所以这是预期的)。 ltrace 不可用,编译它导致了一项艰巨的任务,也许没用。应用程序不是我写的,但有源代码。
我还能做些什么来发现应用程序在消耗这么多资源时忙于做什么?我必须以任何方式跟踪应用程序所做的所有方法调用吗?是否有任何其他技术可以用来尝试猜测问题或将注意力集中在哪里?
编辑:这是 gdb 的问题之一:Only question marks in backtrace reported by gdb on ARM。即使编写一个十行的应用程序来模拟段错误也会导致这种情况。
【问题讨论】:
-
你试过远程调试吗?
-
用gdb远程调试?尝试了几个小时没有成功。 valgrind 也有问题。没有人能够让这些工具在这个平台上工作。还要考虑系统库都被剥离了。
-
能否通过外部端口输出文本,例如串口还是网络?然后你可以添加日志记录。或者只是将日志写入文件。
-
是的,我可以随心所欲地放置日志。但是考虑到这是一个很大的代码,有数千行代码还使用了一些可能隐藏错误的外部库。有没有办法自动放置日志?
-
你提到源是可用的,我会认真考虑在支持良好的平台上重新编译(实际上是任何 *nix 系统),看看那里是否发生错误。该错误很可能是适用的,而不是依赖于平台的。作为奖励,您将获得调试符号。
标签: c++ debugging qt4 embedded