我正在尝试在运行旧版Linux / Qtopia的嵌入式设备上调试应用程序。我在QT论坛上寻求帮助,但那里的人们不知道旧的软件和嵌入式系统。我真的很喜欢调试策略的一些帮助。
我的程序将在构建主窗口后崩溃,即进入事件循环一段时间。但是,根据构造函数中函数的顺序,有时它只能从控制台运行,有时它只会从图标运行。尽管我付出了最大的努力,但我无法缩小导致问题的原因。
没有seg故障或信号,但我的程序没有继续,析构函数也没有被调用。在我看来,在事件循环中首先发生的事情之一是resize事件,如果从控制台或图标运行,调用它时可能会有所不同。此外,如果我没有正确设置某些内容,我的GUI中的各种小部件将被初始化和绘制,因此这也是潜在的错误来源。
我的调试选项受到限制,因为崩溃实际发生的区域不在我的控制之下。我尝试登录到文件并打印到stderr,但这没有任何帮助。当我从图标而不是控制台运行它的状态时,我尝试在gdb和strace中运行但它运行正常 - 调试软件初始化的经典问题不同。
我的下一个想法是尝试强制核心转储,然后分析它。如何强制核心转储?有更好的策略吗?
答案 0 :(得分:2)
记录到文件或通信端口(串行端口等)可能是查看正在发生的事情并维持正常运行时(即不在调试器中)的最简单方法。
你说记录到文件并打印到stderr没有任何帮助。为什么不?您是否将相关的调试信息打印到文件中?您使用Linux / Qtopia源并添加调试日志记录吗?
假设您拥有正在运行的所有代码的源代码,那么应该只是在正确的位置添加调试日志记录以确定问题发生的位置。