Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt中的Q_断言。如何获取调用函数_C++_Qt - Fatal编程技术网

C++ Qt中的Q_断言。如何获取调用函数

C++ Qt中的Q_断言。如何获取调用函数,c++,qt,C++,Qt,我在很多源文件中使用了QVector。当我运行程序时,它会给出一个错误: QVector::operator[]:“索引超出范围”,文件C:/Qt/Qt-5.5.0-x64-mingw510r0-seh-rev0/Qt-5.5.0-x64-mingw510r0-seh-rev0/include/QtCore/QVector.h,第401行 我理解那个错误的意思。然而,它链接到qvector.h而这并没有什么帮助,因为我不知道是哪个源给出了这个错误。我如何才能找到哪个源文件出现了该错误?如果您使用

我在很多源文件中使用了
QVector
。当我运行程序时,它会给出一个错误:

QVector::operator[]:“索引超出范围”,文件C:/Qt/Qt-5.5.0-x64-mingw510r0-seh-rev0/Qt-5.5.0-x64-mingw510r0-seh-rev0/include/QtCore/QVector.h,第401行


我理解那个错误的意思。然而,它链接到
qvector.h
而这并没有什么帮助,因为我不知道是哪个源给出了这个错误。我如何才能找到哪个源文件出现了该错误?

如果您使用的是QtCreator和GCC/GDB,请尝试在调用qFatal()时设置
停止选项

设置选项的步骤:

  • 从菜单中选择
    Tools->Options
  • 在左侧列表中选择
    Debugger
  • 选择
    GDB Extended
    选项卡
  • 选中调用qFatal()时停止
  • 单击
    Ok
  • 运行应用程序。当Q_ASSERT宏的计算结果为false时,QtCreator应该停止并显示堆栈跟踪。您可以使用堆栈跟踪来确定源代码中名为
    QVector::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();
    }
    
    #包括
    #包括
    int main(int argc,char*argv[])
    {
    qcorea应用程序(argc、argv);
    qt向量;
    
    t如果您使用的是QtCreator和GCC/GDB,请尝试设置调用qFatal()时停止的
    选项

    设置选项的步骤:

  • 从菜单中选择
    Tools->Options
  • 在左侧列表中选择
    Debugger
  • 选择
    GDB Extended
    选项卡
  • 选中调用qFatal()时停止
  • 单击
    Ok
  • 运行应用程序。当Q_ASSERT宏的计算结果为false时,QtCreator应停止并显示堆栈跟踪。您可以使用堆栈跟踪确定源代码中调用
    QVector::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();
    }
    
    #包括
    #包括
    int main(int argc,char*argv[])
    {
    qcorea应用程序(argc、argv);
    qt向量;
    t您可以使用Qt中的函数来了解问题发生的位置

    如果在提供的链接上实现示例代码,则可以在
    myMessageOutput
    函数中添加如下内容:

    if(QString(msg).conains("index out of range") == true) {
        qDebug() << "Out of range"; // <- put a breakpoint here.
    } 
    
    您可以使用Qt中的函数来了解问题发生的位置

    如果在提供的链接上实现示例代码,则可以在
    myMessageOutput
    函数中添加如下内容:

    if(QString(msg).conains("index out of range") == true) {
        qDebug() << "Out of range"; // <- put a breakpoint here.
    } 
    

    通过QtCreator在调试模式下运行应用程序。应用程序运行时,您将能够看到调用堆栈crashes@Lahiru这个错误发生在调试模式下。在发布模式下没有检查
    []
    运算符。但是在调试模式下没有堆栈调用信息,
    Q\u ASSERT
    会以某种方式抑制它。在我的QtCreator中,当应用程序因
    Q\u ASSERT
    而崩溃时,我会看到一个对话框,可以选择中止、重试或取消。如果我按下重试,QtCreator会显示堆栈跟踪,就像程序遇到断点一样。我在Windows和QtCrea上Tor使用Visual C++编译器。platforms@LahiruChandima通常在我的QtCreator中也会发生同样的情况,但在这种情况下就不会了。如果没有其他方法有效,您可以在每次使用QVector的[]之前搜索源代码并放置断点操作员。通过QtCreator在调试模式下运行应用程序。应用程序运行时,您将能够看到调用堆栈crashes@Lahiru这个错误发生在调试模式下。在发布模式下没有检查
    []
    运算符。但是在调试模式下没有堆栈调用信息,
    Q\u ASSERT
    会以某种方式抑制它。在我的QtCreator中,当应用程序因
    Q\u ASSERT
    而崩溃时,我会看到一个对话框,可以选择中止、重试或取消。如果我按下重试,QtCreator会显示堆栈跟踪,就像程序遇到断点一样。我在Windows和QtCrea上Tor使用Visual C++编译器。platforms@LahiruChandima通常在我的QtCreator中也会发生同样的情况,但在这种情况下就不会了。如果没有其他方法有效,您可以在每次使用QVector的[]之前搜索源代码并放置断点接线员。+1的信息,但我似乎无法让这个工作,看到我的答案…如果它是一个非常好的和简单的方式来解决问题,我没有意识到+1的信息,但我似乎无法让这个工作,看到我的答案…如果它工作,这是一个非常好的和简单的方式来解决问题,我没有意识到