以下描述了问题以及我为“纠正”它们所做的工作。此运行时事件需要几个小时的时间来解决。由于该网站是我最喜欢的信息来源之一,因此认为这可能会使某些人受益。
我确信这个异常是由我对QObjectCleanupHandler的误解造成的。关于QObjectCleanupHandler的实际实现的任何建设性意见将不胜感激。
- 添加QObjectCleanupHandler和QPointer<>到MDI子窗口和工人类。
在跑步结束时:
出现一个对话框,其中显示的是汇编堆栈数据。
在QT Creator菜单中检查调试日志:Windows \ Views \ Debugger Log \
Log Snippet:
移至最底层
::::
段:
移至最底层
dState从InferiorRunRequested(10)更改为InferiorRunOk(11) [master](1d84.1720):访问冲突 - 代码c0000005(第一次机会) s sException at 0x67343a9c,代码:0xc0000005:读取访问冲突 at:0x0,flags = 0x0(第一次机会)at C:\工作\编译\ qt5_workdir \ W \ S \ qtbase的\ src \ corelib的\核心\ qobject.cpp:2813 在任何异常处理之前报告第一次机会异常。 可以预期和处理此异常。 eax = 03f160f1 ebx = 00000000 ecx = 03f3b728 edx = feeefeee esi = 00000005 edi = 00000000 eip = 67343a9c esp = 0046d1b8 ebp = 0046d340 iopl = 0 nv up ei pl nz na po nc cs = 0023 ss = 002b ds = 002b es = 002b fs = 0053 gs = 002b
efl = 00010202 Qt5Cored!QObject :: disconnect + 0x2bc:2813 67343a9c 8b02 mov eax,dword ptr [edx] ds:002b:feeefeee = ???????? s sException at 0x67343a9c,代码:0xc0000005:读访问冲突位于:0x0,flags = 0x0 (第一次机会)dNOTE:下方自然停止sStopped。 dState 从InferiorRunOk(11)变为InferiorStopOk(14)[master] 解析符号:Qt5Cored!QObject :: disconnect ...
负责异常的源代码片段:
QThread *thread = new QThread;
QPointer<vcSharedDataQt> worker = new vcSharedDataQt();
trackObject(worker);
worker->movetothread(thread);
trackObject()方法是QMdiSubWindow
上的私有字段class <form>
{
private:
QObjectCleanupHandler trackObject(QObject obj);
::: etc.
纠正措施:
源代码段已更改为:
QThread *thread = new QThread;
QPointer<vcSharedDataQt> worker = new vcSharedDataQt();
worker->movetothread(thread);
/ * 删除了所有类中的所有QObjectCleanupHandler实例。 * /
QT环境定义为例外:QT KernelBase!RaiseException at 0x759fc41f
答案 0 :(得分:0)
我曾经遇到同样的问题而且它出现了,我不得不重启QtCreator。再次加载我的项目后,我的代码中没有更改任何内容,我再也没有收到该错误。