首页
社区
课程
招聘
Qt UI异常崩溃调试
发表于: 2023-7-13 15:14 5125

Qt UI异常崩溃调试

2023-7-13 15:14
5125

在Qt应用程序中,UI的更新一般是异步的信号槽机制,所以当槽函数出现访问已经被释放的指针时,会出现很少的崩溃堆栈信息,从而找不到案发点的任何线索。接下来通过有限的信息,尝试追溯案发真相。

程序的崩溃信息如图所示。程序崩溃点看不到发生点的堆栈信息,根据经验,一般出现在Qt5Widgets.dll中,大概率是因为异步的事件出了问题。此次的崩溃现象是每次指向代码的点是不唯一的,这说明很可能堆栈有损坏。


祭出神器WinDbg,打开程序,操作到触发崩溃:
图片描述

显然,是访问[eax+10h]内存出了问题,该内存指向的是不可访问的无效内存。这种情况,大致是原本有效的堆变量被释放了。根据该指令所在地址下断点:
图片描述
断点被触发后:
图片描述

其实在这里基本上可以判断问题出现在CreateBox!QGraphicsScene中,该对象出现了访问悬挂指针的问题。接下可以进一步查看一下,关于这个QGraphicsScene的指针和event的类型。
图片描述

现在可以确定是ecx所指向的0x1c3da408这个对象被释放了,且在QGraphicsScene::event中被访问,当前QEvent的事件类型为0x18.

图片描述

根据这些信息,基本上能快速定位到代码出错的地方。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2023-7-13 15:41 被_THINCT编辑 ,原因:
上传的附件:
收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 50161
活跃值: (20625)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
建议直接将文字放编辑器里,帖图阅读体验不好,并且不利于论坛内容搜索。
内容排版建议优化下
2023-7-13 15:19
1
雪    币: 4425
活跃值: (8780)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
kanxue 建议直接将文字放编辑器里,帖图阅读体验不好,并且不利于论坛内容搜索。 内容排版建议优化下
已根据版主的指示进行了调整。
2023-7-13 16:26
0
游客
登录 | 注册 方可回帖
返回
//