我在很多源文件中使用ui-view.ng-enter, ui-view.ng-leave {
-webkit-transition: 1000ms ease-in-out all;
transition: 1000ms ease-in-out all;
}
ui-view.ng-enter {
opacity: 0;
#register, #login, #forgot-pass {
-webkit-transition: 500ms ease-out all;
transition: 500ms ease-out all;
margin-top: -100px;
}
}
ui-view.ng-enter-active {
opacity: 1;
#register, #login, #forgot-pass {
margin-top: 0px;
}
}
ui-view.ng-leave {
opacity: 1;
#register, #login, #forgot-pass {
-webkit-transition: 500ms ease-in all;
transition: 500ms ease-in all;
margin-top: 0px;
}
}
ui-view.ng-leave-active {
opacity: 0;
#register, #login, #forgot-pass {
margin-top: 100px;
}
}
。当我运行程序时,它会出错:
QVector<double>
我理解错误的含义。但是它链接到ASSERT failure in QVector<T>::operator[]: "index out of range", file C:/Qt/qt-5.5.0-x64-mingw510r0-seh-rev0/qt-5.5.0-x64-mingw510r0-seh-rev0/include/QtCore/qvector.h, line 401
whick没有帮助,因为我不知道哪个源提供了该错误。如何找到哪些源文件会出现该错误?
答案 0 :(得分:2)
如果您使用的是QtCreator和GCC / GDB,请尝试设置Stop when qFatal() is called
选项。
设置选项的步骤:
Tools -> Options
。Debugger
。GDB Extended
标签。Stop when qFatal() is called
。Ok
。运行您的应用程序。当Q_ASSERT宏评估为false时,QtCreator应该停止并显示堆栈跟踪。您可以使用堆栈跟踪来确定源代码中名为QVector<T>::operator[]
的文件和行。
我创建了一个简单的程序来测试。请注意错误的索引t[200]
。
#include <QCoreApplication>
#include <QVector>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QVector<int> t;
t << 1;
t << 2;
int x = t[1];
int y = t[200];
return a.exec();
}
如果没有设置选项,我会在控制台中获得调试输出,QtCreator会显示一些汇编语言。设置选项后,我得到一个堆栈跟踪,如下图所示:
请注意,堆栈跟踪表明我的问题位于文件main
中函数main.cpp
的第14行。
Q_ASSERT
是作为宏实现的。 Q_ASSERT
使用qFatal()
,Q_ASSERT
Q_ASSERT
文档中提到了DEBUG
。
因此,设置该选项将导致QtCreator在Q_ASSERT
停止。
请注意,应用程序必须以QT_NO_DEBUG
模式构建。根据文档,onclick
语句在设置function bounceAgain() {
var el = document.getElementById("test");
el.classList.remove('bounceInUp');
el.offsetWidth = el.offsetWidth;
el.classList.add('bounceInUp');
}
时不执行任何操作。
使用QtCreator 3.5.1和Qt 5.5.1在Windows 7中测试。
答案 1 :(得分:1)
您可以使用Qt中的qInstallMsgHandler功能来帮助您了解问题所在。
如果您在提供的链接上实现示例代码,则可以在myMessageOutput
函数中添加以下内容:
if(QString(msg).conains("index out of range") == true) {
qDebug() << "Out of range"; // <- put a breakpoint here.
}
如果应用程序遇到断点,您还可以检查堆栈跟踪,以便以与@esorton建议相同的方式查看问题发生的位置。
PS:我不知道&#34; GDB扩展&#34;选项卡和Qt Creator中的选项,所以这就是我通常做的。我的建议的好处是你可以跟踪任何类型的消息。
不确定为什么,但做@esorton建议我的QtC给出了一个程序集Disassembler (??)
输出,没有任何帮助来解决问题(可能是我的设置中断了,Ubuntu gcc 4.8和Qt 5.4):< / p>
Function: _Z11qt_assert_xPKcS0_S0_i
0x7f0c731757ea <+0x003a> 24 08 and $0x8,%al
0x7f0c731757ec <+0x003c> 00 00 add %al,(%rax)
0x7f0c731757ee <+0x003e> 00 00 add %al,(%rax)
0x7f0c731757f0 <+0x0040> 48 c7 44 24 10 00 00 00 00 movq $0x0,0x10(%rsp)
0x7f0c731757f9 <+0x0049> e8 92 52 00 00 callq 0x7f0c7317aa90 <_ZNK14QMessageLogger5fatalEPKcz>
0x7f0c731757fe 66 90 xchg %ax,%ax