我试图找出我的Qt应用程序崩溃的原因,调试没有包含很多可用的信息因此很难找到原因...在使用断点后,最接近我发现崩溃可能是w.show()
调用的行(应用程序的GUI在任何按钮或任何东西出现之前都会显示为frooze)。我的主要功能正是如此:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
// disable Window's maxminize button
const Qt::WindowFlags flags = w.windowFlags() ^ Qt::WindowMaximizeButtonHint;
w.setWindowFlags(flags);
w.show();
return a.exec();
}
当到达w.show()
的行时,应用程序启动(但不正确,GUI frooze,如前所述),几分钟后我得到了一个SEGFAULT,调试器看起来像这样:
我该如何解决这个问题?我已经有几天了,试图让调试器提供更多信息,以便我可以追溯SEGFAULT
原因但没有像这样的调试器信息,我不知道该怎么做。
我的Qt版本:
答案 0 :(得分:0)
假设您无法提供MCVE,有多种方法可以解决此类问题:
QApplication::processEvents()
,请考虑将其删除。我推荐Linux的原因是因为gdb很棒,cdb很可怕。如果你有VS企业,你也可以试试它的调试器。
祝你好运。答案 1 :(得分:0)
原始代码中有问题的部分(已修复):
// disable Window's maximize button (use bitwise [and-not]&~ and not [xor]^)
const Qt::WindowFlags flags = w.windowFlags() &~ Qt::WindowMaximizeButtonHint;
w.setWindowFlags(flags);
或通过以下方式实现同样的效果:
w.setWindowFlag(Qt::WindowMaximizeButtonHint, false);
答案 2 :(得分:0)
找到解决方案!
希望对有同样问题的人有用:
在调试消息中,我发现崩溃是GBIEH.dll
dll的结果。谷歌搜索它我发现它与网上银行有关(我想当我的应用程序试图使用该DLL时,IB的应用程序将此作为一种攻击,因此崩溃,我的猜测)。我刚刚删除了网上银行程序,应用程序运行正常。