异常处理不适用于 Windows 上的 Qt

2024-02-03

我面临着奇怪的问题。也就是说,Qt 以某种方式关闭了我的程序中的异常处理。我无法捕获任何异常,当我抛出异常时,应用程序崩溃。

我在 Windows 7(64 位)上使用 Qt SDK v2010.05 中的 Qt 4.7.0(32 位)、MinGW 中的 g++ (GCC) 4.5.1、NetBeans 6.9.1。 但我也用 g++ 3.4.5(也来自 MinGW)和 Qt Creator 2.0.1 对此进行了检查 - 同样奇怪的行为。

例如(最简单的情况):

#include <Qt/QApplication.h>
#include <iostream>
#include <stdexcept>
#include <cstdlib>

using namespace std;


int main(int argc, char* argv[]) {
    QApplication app(argc, argv);

    try {
        cout << "Before exception" << endl;
        throw runtime_error("Exception occured");
        cout << "After exception" << endl;
    } catch (runtime_error& exc) {
        cout << exc.what() << endl;
        exit(1);
    }

    return 0;
}

当我执行上面的程序时,我得到以下输出:

异常前

此应用程序已请求运行时以异常方式终止它。
请联系应用程序的支持团队以获取更多信息。

我尝试向 g++ 添加标志“-fexceptions”,但它没有改变任何东西。

当我不使用 Qt 时,一切正常:

#include <Qt/QApplication.h> // It is not caused only by including Qt header
                             // so it doesn't matter if I comment this out or not
#include <iostream>
#include <stdexcept>
#include <cstdlib>

using namespace std;


int main(int argc, char* argv[]) {
    // QApplication app(argc, argv);

    try {
        cout << "Before exception" << endl;
        throw runtime_error("Exception occured");
        cout << "After exception" << endl;
    } catch (runtime_error& exc) {
        cout << exc.what() << endl;
        exit(1);
    }

    return 0;
}

输出:

异常前
发生异常

有谁知道为什么会这样以及如何解决这个问题?这与构建 Qt 时使用的异常处理方法(SJLJ 或 Dwarf-2)的类型有关吗?


我已经用 flag 重新配置并重新编译了 Qt-exceptions:
D:\Qt\2010.05\qt>mingw32-make confclean && configure -exceptions && mingw32-make
现在一切都好了!

感谢大家的帮助,特别是 Nick D!

不管怎样,我在没有这个标志的情况下构建了 Qt,这很奇怪。我从官方网站下载了二进制形式的 Qt SDK。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

异常处理不适用于 Windows 上的 Qt 的相关文章

  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定

随机推荐

  • 在 R Markdown 模板中包含图像,无需为模板创建新目录

    我正在构建一个投影仪演示模板 我想在幻灯片的前面添加一个徽标 尽管这可以通过在演示文稿目录中包含图像来实现 但我不希望只为该图像的每个新演示文稿创建一个新目录 有没有一种方法可以从包内检索相对文件路径resources文件夹并让它引用 La
  • 为什么套接字可以 connect() 到它自己的临时端口?

    我可以可靠地获得 Winsock 套接字connect 如果我使用自动分配的临时端口 5000 65534 范围内的端口连接到本地主机 具体来说 Windows 似乎有一个系统范围的滚动端口号 这是它将尝试分配为客户端套接字的本地端口号的下
  • 使用 std::string 键提升共享内存中的无序映射

    是否可以在共享内存上使用 std string 或其他复杂结构键类型以及 boost 无序映射 如果是这样 我可以找到一些示例代码吗 我找到了一些在共享内存上使用无序映射的示例代码 但无法将键类型更改为复杂结构 谢谢 Yes 您可以在此处查
  • 如何向初学者描述面向对象编程?现实世界有一个很好的类比吗?

    我的姐夫是一名大学工程专业的新生 他之前没有编程经验 他正在课堂上学习编程 但他似乎在基本概念上遇到了困难 更糟糕的是 他似乎是所有班级中唯一没有编程背景的人 他在 Matlab 上做得很好 我不知道 然后当他学习 Python 基础知识时
  • Cytsocape.js 无法使用不存在的目标创建边缘

    在使用 AJAX 请求创建节点后 我尝试创建边缘 My code success function data each data kids function i value cy add group nodes data id value
  • 从 QML 访问 QStandardItemModel 的项目

    已编辑 在原始问题中 我错误地假设 GridView 本机使用二维模型 事实上 它与其他 QML 类似 需要一个元素列表 意见 为了使问题和答案更容易理解 我更改了给定的代码 轻微地 此外 我根据答案添加了工作解决方案 在主程序中 我定义了
  • Win32 LB_GETTEXT 返回垃圾

    我有一个问题 很可能是一个简单的问题 但对我来说仍然是一个问题 我在 Win32 C 中使用列表框 当从列表框中获取选定的文本时 返回的字符串只是垃圾 它是结构或类似结构的句柄 下面是代码和我得到的示例 std string Listbox
  • 在heroku上管理多个ssh密钥

    所以我有几个 ssh 密钥用于我拥有的其他帐户 我现在需要能够在我的计算机上克隆 heroku 存储库 我创建了一个新的 ssh 密钥并使用 heroku keys add 将其添加到我的 heroku 帐户 但是 当我尝试克隆存储库时 我
  • 无法在 Docker Compose 中向非 root 用户授予对 Docker 卷的写入权限

    我正在运行一个 Docker Compose 环境 在其中执行一系列 Selenium 测试 为了做到这一点 我正在使用Selenium 提供的图像 https github com SeleniumHQ docker selenium 我
  • 函数导致自动生成的 RcppExports.R 检查错误

    我正在使用 Rcpp 0 12 11 和 R 3 4 0 当我将 Rcpp 升级到 0 12 11 时 由 Rcpp compileAttributes 自动生成的 R 文件 RcppExports R 开始为我提供略有不同的函数调用 ru
  • VS2013中cshtml窗口垂直分割

    在VS2013中我想查看相同的cshtml文件并排在 2 个窗口中 即垂直分割 我知道如何进行水平分割 但这不是我在这里追求的 通常的方法是复制选项卡 WINDOW New Window 文件 然后创建一个新的垂直选项卡组 但是 我找不到复
  • Android应用程序强制关闭时如何在运行时获取日志

    如何在 Android 应用程序中强制关闭时在运行时获取日志 我想获取日志并邮寄 这里有一些用于收集应用程序内部日志的代码 private int MAX LOG MESSAGE LENGTH 100000 private String m
  • 将 Vuetify 导航抽屉切换为迷你,然后切换为临时

    我在 Vue js 中有一个项目 我正在使用 Vuetify 我有一个工具栏和导航抽屉 我想要的是在桌面上抽屉打开时 如果用户单击侧面图标 抽屉将切换为迷你 如果打开 md 抽屉将切换至迷你 如果用户单击侧面图标 迷你会切换回抽屉 如果打开
  • 如果 NSString 不等于函数?

    我已经到处搜索过这个问题 包括苹果关于 NSString 的文档 也许我没有看到 但我试图在 xCode 中找到一种方法来检查 NSString 是否不等于某些内容 很像 if myNSSting text 除了特别我想检查它是否不等于 文
  • 动态数组的运算符重载给出奇怪的错误

    当我使用它时 我收到有关 废弃限定符 的错误 下面发布了整个班级 cout lt lt d where d is of type dynamic array 全局重载函数 template
  • EXISTS 在 INSERT 之前还是之后哪个更快?

    我在 SQL Server 中有一个 SP 它每分钟运行数百次 需要根据数据库检查传入流量 目前它执行以下操作 INSERT INTO table SELECT value1 value2 WHERE NOT EXISTS SELECT F
  • 在审查委员会中自动提交已批准的差异

    当我在审核委员会批准审核请求时 是否可以对其进行配置 使其自动将 diff 文件提交到 SVN 据我所知 这在当前版本的 Review Board 中是不可能的 自评论发布以来 存储库可能已被提交 这意味着差异的应用可能会失败 由于审查通常
  • 在 Webpack 中导入使用 npm 安装的“常规”javascript 包

    我已经安装了npm平滑滚动 https github com cferdinandi smooth scroll 一个不支持的包import syntax 如果我手动将源代码复制到 libs 库并使用script tag 但我该如何使用im
  • Apache Flink 1.3 中的 Elasticsearch 5 连接器

    通过阅读文档 我了解到使用 Apache Flink 1 3 我应该能够使用 Elasticsearch 5 x 但是 在我的 pom xml 中
  • 异常处理不适用于 Windows 上的 Qt

    我面临着奇怪的问题 也就是说 Qt 以某种方式关闭了我的程序中的异常处理 我无法捕获任何异常 当我抛出异常时 应用程序崩溃 我在 Windows 7 64 位 上使用 Qt SDK v2010 05 中的 Qt 4 7 0 32 位 Min