64 位计算机上的 32 位程序不会因 NullReferenceException 而崩溃

2023-12-26

我有一段代码抛出一个NullReferenceException:

dataSource.DataSource = GetView();

它抛出是因为dataSource is null. GetView返回一个DataTable.

但是,当在一台计算机(64 位)上运行时,程序可以继续运行,不会出现任何问题。异常确实发生了,因为当我迈出一步时,我完全到了别的地方。但调试器不会停止。

当在另一个(32 位)上运行时,它会抛出异常并且我的调试器停止。

我的程序是为 32 位编译的。当我切换到“任何 CPU”时,64 位计算机确实因异常而崩溃。

Update我知道如何解决我的问题(事实上我已经知道了)。我只想知道这是否是某种已知的行为,或者可能是由多种原因引起的。

The fix was 1) choose "Any CPU" (which made the 64-bit machine crash) and 2) check if dataSource is null before running this piece.


太多评论使重复链接可见,所以我将其作为答案。这是在 64 位版本的 Vista 和 Win7 上调试 32 位程序时的一个已知问题。消息调度程序中通常有一个后停止程序,当调度程序处理 Windows 消息并且该消息的事件处理程序抛出未捕获的异常时,它会捕获未处理的异常。那normally在 Winforms 上触发 Application.ThreadException 事件,在 WPF 上触发 Dispatcher.UnhandledException 事件。

然而,当您调试程序时,这些事件非常尴尬,它使得诊断未处理的异常变得困难。因此,当您在附加调试器的情况下启动程序时,此后停止功能将被禁用,以允许调试器查看异常并显示异常助手。为您提供解决问题的机会。

Microsoft 对源自 64 位窗口管理器并多次穿越 Wow64 模拟层边界的某些消息存在问题。他们无法弄清楚如何让未处理的异常遍历这些层,异常信息与代码模型紧密相关。所以他们做了他们唯一能做的另一件事,他们catch例外。这通常会激活“应用程序兼容性”对话框,让用户选择将异常视为良性,每个人都在此对话框上单击“是”,因为他们不知道该对话框要求什么,并且希望他们的程序兼容。

这对于您的调试尝试来说是非常致命的,调试器无法再看到未处理的异常,因为 Windows 捕获并吞下了它。因此,您得到的正是您所描述的内容,代码只是停止运行,没有任何提示原因。您只能在“输出”窗口中看到第一次机会异常通知,很容易错过。

我之前发布了有关此问题的答案并记录了该问题的解决方法。你会找到它here https://stackoverflow.com/a/4934010/17034.

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

64 位计算机上的 32 位程序不会因 NullReferenceException 而崩溃 的相关文章

  • 是否有与 posix_memalign 对应的 C++ 版本?

    当我打电话时posix memalign http man7 org linux man pages man3 posix memalign 3 html为类型的对象分配对齐的内存Foo在我的 C 代码中 我需要做一个reinterpret
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 使用可变参数包类型扩展的 C++ 函数调用者包装器

    我绑定了一些 API 并且绑定了一些函数签名 如下所示 static bool WrapperFunction JSContext cx unsigned argc JS Value vp 我尝试将对象和函数包装在 SpiderMonkey
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 为什么从字典中获取时会得到 Action<> 的克隆?

    我有以下字典 private Dictionary
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • 如何在AWS ElasticSearch的Painless内联脚本中替换没有正则表达式的字符串?

    文档中 级别 字段的类型已从 关键字 更改为 短 我正在尝试重新索引现有数据以便能够在 Kibana 图表中使用它 旧数据包含以下值 100 错误 或只是空字符串 我只想获取新索引内的整数 我使用内部重新索引 API 添加新行以使代码片段更
  • doctype 未在 JSF“主”模板中呈现

    正如主题所说 所需的文档类型未在我的 JSF 页面中呈现 我使用的版本 Payara 服务器 Payara 服务器 4 1 2 181 badassfish build 220 莫贾拉 2 3 3 20171008 2230 673408f
  • StackExchange.Redis - 是否可以优先考虑端点?

    我的设置 4台Windows服务器 每台服务器上都有一个 Redis 节点和一个 Sentinel 进程 在每台服务器上部署相同的 Web 应用程序 Web应用程序通过StackExchange Redis驱动程序连接到redis服务器 一
  • GitLab CI、monorepo 和功能分支

    我在 GitLab 中有一个采用功能分支方法的 monorepo 我想要实现的是启动与包含已更改文件的目录关联的管道部分 所以我的 gitlab ci yml 看起来像 job1 stage build script only change
  • iOS 使用 Swift 行为解析 PFObject 子类

    我有一个奇怪的问题 我的子类化在我的所有视图控制器中都有效 除了一个 我已经导入了所需的所有内容 但是这一堂课给了我 调用中参数 className 缺少参数 我的子类 import Foundation import Parse clas
  • Android TextSwitcher 在设置文本后无法换行内容宽度

    当我设置文本时 我使用 TextSwitcher 来放置淡入 淡出动画 但是当文本更改时 按宽度换行内容会出现一些问题 以下是我的 TextSwitched xml
  • Laravel:生产数据的迁移和播种

    我的应用程序需要预先注册的数据集才能工作 因此 当我设置应用程序时 我需要将它们插入数据库 Laravel http laravel com 提出两种机制 数据库迁移 http laravel com docs migrations 它们允
  • 前 10000 个素数最有效的代码?

    我想打印前 10000 个素数 谁能给我最有效的代码 澄清 如果您的代码在 n gt 10000 时效率低下 那也没关系 代码的大小并不重要 您不能以任何方式对值进行硬编码 阿特金筛 http en wikipedia org wiki S
  • 如何通过 php 从文件中提取特定字符串(电子邮件)[重复]

    这个问题在这里已经有答案了 我有一个文本文件 其中包含有关组织专家的一些成员信息 现在我只想从中提取电子邮件地址 示例文件 email protected cdn cgi l email protection jhgvhdhf email
  • 整数区间内的哈希表键

    我不知道这是否可能 但我正在尝试创建一个哈希表 其中 Interval 是一个具有 2 个整数 长值 一个开始和一个结束的类 我想做这样的事情 Hashtable
  • 如何在 Jitpack 上使用 maven 发布 Kotlin 库的 KDoc?

    背景 经过大量的研究和尝试 并寻求帮助 我成功地在 Jitpack 上使用 maven 发布了一个私有的 Github 存储库 写为here https stackoverflow com a 67071394 878126 因此 目前我放
  • Spring 类加载应用程序上下文

    我有一个 Spring Web 项目 我需要在初始化应用程序上下文后加载一些类 因为这些类最终将在将来使用 因此 我尝试在使用前预加载它们以提高性能 怎么做 请帮忙 Thanks 要将一个类加载到 JVM 中 只需调用Class forNa
  • 修改对象的键而不创建新对象[重复]

    这个问题在这里已经有答案了 我有以下输入 foo 4 bar 3 我想修改这个对象的键以获得 x foo y 4 x bar y 3 是否可以修改对象而不创建新对象 可用 jQuery 是的 您只需添加新密钥并删除旧密钥即可 obj x f
  • 为什么我们不能像其他模式对象一样删除引用的类型

    When a Type尝试删除或替换有依赖项的情况下 oracle 会抛出以下错误 与其他模式对象 如过程 不同 在其他模式对象中 您删除一个对象 然后它就会被删除 并且依赖对象也会被删除invalid 我的两个问题是 1 为什么是Type
  • 在 Sqlite 中存储 NSMutableArray

    我有一个 NSMutableArray 其中包含多个 CGRect 的坐标和大小 我想将其存储到 sqlite 中 是否可以存储整个数组 或者我应该将 CGRect 手动存储在数据库中 UPDATE 这是我从数据库检索到的数据 62706c
  • 为什么原始数据类型可以在不包含 System 命名空间的情况下工作?

    我读到所有原语都属于System命名空间 如果我评论掉using System我预计我的程序中会出现构建错误 但它运行成功 为什么是这样 这是因为int是一个别名System Int32 并且由于 Int32 已经以其名称空间为前缀 即 完
  • 如何捕获 C 函数调用的 Haskell 回调函数中引发的 Haskell 异常?

    有没有什么好方法来捕获由c函数调用的haskell回调函数中引发的haskell异常 例如 让我有一个简单的 c 函数 它只调用给定的回调 void callmeback void callback callback 以及通过 ffi 使用
  • 在Linux和Windows机器上使用C++调度任务

    我正在开发网关模拟器应用程序 网关将视频流式传输到客户端 网关模拟器可以模拟 1000 个网关 用户可以发出命令 例如 1 小时后开始录制并录制长达 1 小时 或者可以流式传输视频5点钟 所以基本上安排了任务 该网关将在 Windows 和
  • 带 Y 组合器的列表函数没有递归,为什么?

    注意 这是一种家庭作业 而不是一种家庭作业 最终目标是拥有一个函数 该函数生成一组数字的幂集 以数字列表的形式提供给该函数 我有该函数的递归版本 但我现在需要找到一些方法来替换我拥有的解决方案中的每个显式递归函数 append mapm等
  • 64 位计算机上的 32 位程序不会因 NullReferenceException 而崩溃

    我有一段代码抛出一个NullReferenceException dataSource DataSource GetView 它抛出是因为dataSource is null GetView返回一个DataTable 但是 当在一台计算机