在“错误的行”中抛出异常(C#、Windows 窗体、VS2017)

Posted

技术标签:

【中文标题】在“错误的行”中抛出异常(C#、Windows 窗体、VS2017)【英文标题】:Exception is thrown in the "wrong line" (C#, Windows Form, VS2017) 【发布时间】:2021-11-18 16:11:41 【问题描述】:

我有一个奇怪的问题,这可能是正常的,但我希望能得到一些解释。

我正在编写一个 C# Windows Form 程序,每当我的代码遇到异常时,它就会被抛出到主窗体生成代码的行中,这里是:

我的问题是,为什么会这样?上面的异常是在我的代码的另一行中引发的,但它显示在这里。我调试了我的代码,因为我知道异常可能发生在哪里,当我到达可疑行时,Visual Studio 会跳到图片上的行并抛出异常。

这真的很不方便,因为我不知道我的一些异常是在哪里真正抛出的,而且它会减慢错误解决过程。

有人可以解释为什么会这样以及如何“解决”这个问题吗?

【问题讨论】:

这就是他们发明堆栈跟踪的原因。发生这种情况也是因为异常未被捕获并且可能在构造函数或构造阶段。为什么在这里给你例外?因为这可能是堆栈中的最后一个调用代码(术语使用松散) 您需要提供异常的堆栈跟踪。我认为异常来自main_form的构造函数 如果您选择接受,这就是您的使命。检查堆栈跟踪。 B 在几个地方尝试 catch 并检查那里的异常或记录它或其他东西 AppDomain.UnhandledException Event 您可以指示调试器在抛出异常时停止,而不是在使用“异常设置”窗口(调试时按 CTRL+ALT+E)未处理时停止。 【参考方案1】:

这本身并没有错;您已使用反射调用(或导致调用)某些方法,该方法因未处理的异常而崩溃,然后您的主线程遇到异常并引起您的注意。

当这个多米诺骨牌效应停止时,主线程正忙于执行 application.run,所以它是该线程的“正确线”,只是它可能不是正在执行工作的线程崩溃了。使用内部异常详细信息找出问题所在,或者尝试 Klaus 的建议以打开“抛出时中断”。

我的猜测是你一直在后台线程上做某事(你在任何地方都有后台工作人员吗?他们是否在他们的 DoWork 中访问数组?)并且崩溃了;在 winforms 应用程序中这是一个相当常见的原因

【讨论】:

以上是关于在“错误的行”中抛出异常(C#、Windows 窗体、VS2017)的主要内容,如果未能解决你的问题,请参考以下文章

StringToByteArray() 在 C# 2.0 中抛出异常

忽略在 C# .NET 中抛出的特定异常

如何在 Linux 上的 .NET 6 中抛出异常的 StackTrace 中获取行号

Zipfile OpenRead 在 c# uwp 应用程序中抛出对路径的访问被拒绝异常?

在 PHP Try Catch 块中抛出异常

如何调试 WPF InitializeComponent() 中抛出的 EEFileLoadException?