Qt软件调试技巧

时间:2019-02-21 20:00:26

标签: c++ windows qt

我有发布到Microsoft Store的应用程序,位于Dev center中该应用程序的运行状况页面下,它报告崩溃问题:

fail_fast_fatal_app_exit_c0000409_qt5core.dll!qt_logging_to_console

并跟踪堆栈:

0   ucrtbase.dll    abort   0x000000000000004E
1   Qt5Core.dll qt_logging_to_console   0x000000000000017A
2   Qt5Core.dll QMessageLogger::fatal   0x0000000000000093
3   Qt5Gui.dll  QPixmap::paintEngine    0x0000000000000052
4   Qt5Gui.dll  QPixmap::QPixmap    0x0000000000000037

在调试应用程序时,我不会崩溃。问题是如何通过堆栈跟踪在代码中获取崩溃位置或功能行/名称?有任何想法吗?谢谢。

2 个答案:

答案 0 :(得分:1)

十六进制看起来像一些偏移量,可能是从函数开始时的偏移量,因为它们很小。您可以下载并编译dia2dump实用程序(它也是VS示例中的某个位置),该实用程序可以转储很多有关调试符号的信息,包括每个偏移量的行号。这样您就知道堆栈的行号。

PS请注意,要研究此堆栈,您需要Qt的pdb,而不是程序的pdb。

答案 1 :(得分:0)

我认为问题出在程序图标的动态创建/销毁和DestroyIcon破坏了正在使用的句柄。

我添加了一些改进,现在它仅创建了HICONQPixmap的1个对象,然后追加到循环中的结构中,并在循环退出后调用DestroyIcon函数来销毁HICON句柄。

我也找到了有关从Microsoft Store查找错误的文章: How to get a crash dump (or any usable crash report) for a converted Windows Store UWP app?

但是我还要尝试StackWalker应用程序来检查其他问题。谢谢。