-
-
[原创]为什么我选择windbg而不是visual studio?
-
-
[原创]为什么我选择windbg而不是visual studio?
问题背景
程序崩溃时,虽然在 Visual Studio 中能定位到崩溃发生的地方,但无法准确确定导致崩溃的具体对象。在调试过程中,堆栈信息只能显示出MainWindow
的析构函数出现问题,而没有进一步的信息,无法确定是哪一个对象的析构导致了崩溃。

问题分析
通过 Windbg,能够加载 QT 的符号文件,从而提供更详细的调试信息。通过查看 Windbg 的堆栈信息,我们能够定位到崩溃的根本原因:metaObject
对象的无效堆内存。


从堆栈信息中可以看到,在MainWindow
析构过程中,有一个成员对象的析构已经释放了内存,但父对象依然尝试访问这个已经释放的成员,导致了程序崩溃。
详细步骤与定位过程
- 定位崩溃对象
- 堆栈分析
总结与解决方案
该问题的根本原因是,updateLivePlotPtChartTimer
对象在析构后被错误地使用。为了避免此类问题,应该确保在析构对象之后,所有对该对象的引用都被清理或设为nullptr
。此外,合理的资源管理(如使用智能指针)可以有效避免类似的内存访问错误。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2025-3-2 12:35
被_THINCT编辑
,原因: 补充图片