问题标签 [exception]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
13607 浏览

c# - 创建我自己的自定义异常有哪些最佳实践?

在上一个关于异常的问题的后续行动中,在 .NET 中创建自定义异常的最佳实践是什么?

更具体地说,您应该继承 System.Exception、System.ApplicationException 还是其他一些基本异常?

0 投票
2 回答
2427 浏览

visual-studio - 调试期间算术下溢或上溢异常

这是奇怪行为的一天。

我们有一个使用 Delphi 2007 制作的 Win32 项目,它承载 .NET 运行时并调用 .NET 以显示新表单,作为过渡期的一部分。

最近,我们开始在看似随机的位置和代码点遇到异常:算术上溢或下溢。

其中之一的堆栈跟踪如下所示:

在 Visual Studio 解决方案中,最外层的类库之一(即,它可以提取所有引用)已经设置了一个特定的调试程序,以 Delphi 项目输出为目标。这允许我们从 Visual Studio 调试 .NET 代码,即使程序的主要部分是用 Delphi 编写的。

该问题仅在从调试器运行时出现,而不是在我们直接运行 exe 文件时(通过资源管理器、快捷方式,甚至是Visual Studio 中的Ctrl+ )。F5

机器上显然没有间谍软件(如 this 暗示的那样

还有什么我们可以检查的吗?


编辑:看起来 .NET 调试器启用了这个 SNaN 标志,而 Delphi 调试器没有。我们将不得不对此进行进一步调查,但现在我将接受@Lorenzo Boccaccia的回答。

显然解决了

好的,看起来我们终于解决了这个问题。对于我们的测试人员来说,在没有附加调试器的情况下开始出现问题,因此我们必须优先考虑问题的优先级。

最后,我们发现了有问题的机器的一个常见问题,它们是配备 NVIDIA Quadro NVS 110M 的 Dell Lattitude D620 笔记本电脑,其系统映像中的旧驱动程序用于配置笔记本电脑,早在 2006 年。

我在网上找到了一篇帖子,虽然我在重新启动以更新显示驱动程序时丢失了 url,导致 .NET 服务崩溃,主要是当机器忙于在屏幕上做某事时。重现他的问题的一种方法是打开 C:\ 的命令提示符并执行 aDIR /S以强制进行大量屏幕更新,这将触发崩溃。

他也有一个 NVIDIA 视频卡。

我的机器上的问题大约每 2-4 次启动我们的程序就会出现,但在更新视频驱动程序后,我已经成功启动了 123 次,没有任何问题。(顺便说一句,我可以为这些事情推荐AutoHotKey )。

所以看起来我们找到了罪魁祸首,一个旧的/有缺陷的 NVIDIA 驱动程序。

更新了这个问题,以便将来有人可以节省一些时间。

现在,如果你能原谅我,我要去角落里哭。

被诅咒了!

我一定是把它搞砸了。在更新视频驱动程序后,我刚刚发布了上述更新,同事的笔记本电脑就出现了故障。

不过,我很肯定它现在是我们应用程序之外的一个问题,所以只需要弄清楚要更新哪些具体的东西。


进一步更新:好的,我的机器现在显然是固定的,我同事的机器不是这样。到目前为止,我们已经更新了 BIOS、芯片组驱动程序,目前 XP 的 SP3 即将推出。

今晚将进行老化测试,该应用程序将在夜间启动,因为问题在启动期间或第一次执行某些 WinForms .NET 代码时突然出现。这个应用程序主要是一个 Delphi Win32 应用程序,但它承载 .NET 运行时,问题似乎与 .NET 代码有关。当我们“启动”.NET 运行时,问题可能会出现,或者当我们从 Win32 触发第一个 .NET 窗口时,它也会出现。


从统计学上讲,我现在准备发布此代码。一夜之间,该应用程序已启动 3051 次而没有出现错误,而在我更新视频驱动程序之前,它每 2-4 次崩溃一次。

发现(!/?)

这种修复错误的折磨感觉就像去看医生,接下来会发生以下对话:

我已经刺激并戳了应用程序,最后我想我已经找到了我们所做的导致这个问题的事情。

在我们的应用程序中,我们托管来自 Delphi 2007 Win32 应用程序的 .NET 运行时,在我们的胶水代码中,我们有以下行(现在):

中间的两个常量原来只有一个 0,意思是选择默认值。这种变化是几个月前引入的,此后问题一直在慢慢蔓延到我们身上。引入此更改是为了鼓励 ANTS 分析器加载我们的 Win32 应用程序 + 托管的 .NET 运行时,以便进行性能分析,而我们当时引入的更改使这项工作发挥了作用。此外,算术上溢/下溢的问题正在慢慢变得更糟,所以我敢打赌,这个问题在更改后的一段时间内都没有出现,因此它与我们所做的任何更改都无关。

此外,由于我们仅(最初)在通过调试器运行时看到了问题,因此我们认为 Visual Studio 和/或 Delphi 有问题。

无论如何,现在从统计上看,在一个屏幕上的浏览器重复由 javascript 触发的上下滚动(显然需要触发错误),然后我已经能够成功启动应用程序 726 次,调用中的值为 0 ,并且它在 17 次中有 5 次崩溃,其中有两个常数。

让我们先不要讨论是谁做出了这种改变。我敢肯定罪魁祸首是想匿名...

0 投票
10 回答
90109 浏览

c# - 如何在 C# 中重新抛出 InnerException 而不会丢失堆栈跟踪?

我正在通过反射调用一个可能导致异常的方法。如何在没有包装反射的情况下将异常传递给调用者?
我正在重新抛出 InnerException,但这会破坏堆栈跟踪。
示例代码:

0 投票
3 回答
1806 浏览

winforms - BufferedGraphicsContext 错误

经过几个小时的应用程序使用后,我每天都在同一时间收到以下错误和调用堆栈。任何人都可以对正在发生的事情有所了解吗?

0 投票
2 回答
5432 浏览

python - re.compile() 或任何给定的 Python 库调用是否会引发异常?

我无法从 Python 文档中判断 re.compile(x) 函数是否可能引发异常(假设您传入一个字符串)。我想有些东西可以被认为是无效的正则表达式。更大的问题是,我在哪里可以找到给定的 Python 库调用是否会引发异常以及这些异常是什么?

0 投票
9 回答
67963 浏览

c# - 在安全处理异常时避免首次机会异常消息

以下代码捕获 EOS 异常

那么为什么我仍然会在我的控制台中收到第一次机会异常呢?

mscorlib.dll 中发生了“System.IO.EndOfStreamException”类型的第一次机会异常

有没有办法隐藏这些第一次机会异常消息?

0 投票
9 回答
11059 浏览

php - 在 PHP5 中,我应该使用 Exceptions 还是 trigger_error/set_error_handler?

做任何一种方式的优点/缺点是什么。有一种正确的方式(tm)吗?

0 投票
7 回答
2831 浏览

.net - 如何在 Application.ThreadException 事件处理程序中获取整个异常链?

我只是在修复 .NET 2.0 应用程序中的异常处理,我偶然发现了Application.ThreadException的一些奇怪问题。

我想要的是能够从 GUI 元素后面的事件中捕获所有异常(例如 button_Click 等)。然后我想在“致命”上过滤这些异常,例如,对于某些类型的异常,应用程序应该继续运行,而对于其他类型的异常,它应该退出。

在另一个 .NET 2.0 应用程序中,我了解到,默认情况下,只有在调试模式下,异常才会真正留下 Application.Run 或 Application.DoEvents 调用。在发布模式下,这不会发生,并且必须使用 Application.ThreadException 事件“捕获”异常。

然而现在,我注意到Application.ThreadException 事件的 ThreadExceptionEventArgs 中传递的异常对象始终是异常链中最内层的异常。出于日志记录/调试/设计目的,我真的想要整个异常链。确定哪个外部系统失败并不容易,例如当您刚刚处理 SocketException 时:当它被包装为例如 NpgsqlException 时,那么至少您知道这是一个数据库问题。

那么,如何从这个事件中获取整个异常链呢?甚至有可能还是我需要以另一种方式设计我的异常处理?

请注意,我确实有一个使用Application.SetUnhandledExceptionMode的解决方法,但这远非理想,因为我必须推出自己的消息循环。

编辑:为了防止更多错误,GetBaseException() 方法不会做我想要的:它只返回最里面的异常,而我唯一已经拥有的是最里面的异常。我想了解最外面的异常!

0 投票
3 回答
8461 浏览

c++ - C++ 异常代码查找

了解异常代码后,有没有办法进一步了解引发的实际异常意味着什么?

我有问题的例外:0x64487347

异常地址:0x1

调用堆栈不显示任何信息。

我正在查看崩溃的 .dmp,但实际上并未在 Visual Studio 中进行调试。

0 投票
1 回答
3322 浏览

asp.net - ASP.NET WebService 在抛出异常时返回乱码

我有一个 Web 服务 (ASMX),其中有一个 Web 方法,它可以完成一些工作并在输入无效时抛出异常。

回到网页上的客户端 JavaScript,在错误回调函数上,我显示我的错误:

这很好用,当我的 Web 方法返回(一个字符串)时,它总是看起来很完美。但是,如果我抛出的异常中的一条错误消息包含特殊字符,则它在浏览器中显示不正确。例如,如果错误消息包含以下内容:

该输入无效! (那里有一个 ASCII #146)

它显示这个:

该输入无效!

或者:

你喜欢 Hüsker Dü 吗?(ASCII #252)

变成:

你喜欢 Hüsker Dü 吗?

错误消息的内容来自采用 UTF-8 编码的 XML 文件:

就页面编码而言,在我的 Web.config 中,我有:

我还有一个 HTTP 模块来设置 L10n 参数:

我试过禁用这个 HTTP 模块,但结果是一样的。

Web 服务返回的值(在 l_errMsg 变量中)在 VS 调试器中看起来很好。只是一旦客户端脚本持有,它就会显示不正确。我已经使用 Firebug 来查看响应,并且其中也有特殊字符被破坏。所以我觉得很奇怪,我的 web 方法返回的字符串看起来很好,即使其中有特殊字符。然而,当我从 web 方法中抛出异常时,其消息中的特殊字符是不正确的。我怎样才能解决这个问题?