C# 在Visual Studio中调试文件IO错误的最佳方法

C# 在Visual Studio中调试文件IO错误的最佳方法,c#,visual-studio,visual-studio-2012,file-io,visual-studio-2013,C#,Visual Studio,Visual Studio 2012,File Io,Visual Studio 2013,在Visual Studio中,每当出现文件IO异常时,我都可以看到一个全局未处理异常,如下所示: System.IO.FileNotFoundException:系统找不到指定的文件 但是,它没有说明它试图访问哪个文件,也没有说明可以帮助我找到代码中调用此文件访问的位置的任何其他信息。我已经做了很多在线搜索,并尝试查看调用堆栈,但我想不出一个简单的方法来调试它,除了在任何地方设置断点并尝试进入异常发生的确切位置 我是VisualStudio的新手,我想知道人们是否有关于如何更好地调试它的建议。

在Visual Studio中,每当出现文件IO异常时,我都可以看到一个全局未处理异常,如下所示:

System.IO.FileNotFoundException:系统找不到指定的文件

但是,它没有说明它试图访问哪个文件,也没有说明可以帮助我找到代码中调用此文件访问的位置的任何其他信息。我已经做了很多在线搜索,并尝试查看调用堆栈,但我想不出一个简单的方法来调试它,除了在任何地方设置断点并尝试进入异常发生的确切位置

我是VisualStudio的新手,我想知道人们是否有关于如何更好地调试它的建议。我相信这对有经验的VisualStudio用户来说是小菜一碟

我用C/C++编写,并使用Visual Studio 2013 Ultimate

更新: 我的错误是,我以为我继承了一些未经处理的全局异常代码,但事实证明它是在App.g.I.cs中自动生成的代码:

#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
        UnhandledException += (sender, e) =>
        {
            if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();
        };
#endif

只需查看堆栈跟踪,就可以显示异常在代码中的位置。这会给你一个关于它可能是哪个文件的大提示


尝试显示ex.ToString以查看整个堆栈跟踪。

只需查看堆栈跟踪即可显示异常在代码中的位置。这会给你一个关于它可能是哪个文件的大提示


尝试显示ex.ToString以查看整个堆栈跟踪。

这些步骤在VS 2010中起作用-如果在较新版本中不相同,我希望它非常相似

在Visual Studio中,转到:

调试>异常菜单 展开公共语言运行时异常 扩展System.IO 在System.IO.FileNotFoundException的抛出列中打勾 现在,在调试模式下运行代码

Studio将在引发异常时提醒您。下面是它的屏幕截图。在该窗口中,您可以单击查看详细信息以图形方式浏览异常信息

这是伟大的调试您的机器-我使用它的所有时间。但是,您应该有一个策略,例如良好的、可配置的日志记录,以防您需要在其他人的机器上调试这些类型的信息


这些步骤在VS2010中有效——我希望它在新版本中非常相似,如果不相同的话

在Visual Studio中,转到:

调试>异常菜单 展开公共语言运行时异常 扩展System.IO 在System.IO.FileNotFoundException的抛出列中打勾 现在,在调试模式下运行代码

Studio将在引发异常时提醒您。下面是它的屏幕截图。在该窗口中,您可以单击查看详细信息以图形方式浏览异常信息

这是伟大的调试您的机器-我使用它的所有时间。但是,您应该有一个策略,例如良好的、可配置的日志记录,以防您需要在其他人的机器上调试这些类型的信息


请告诉我们您是如何处理全局异常的。您好@JohnSaunders我错误地认为我继承了一些全局异常处理代码,但它只是自动插入到App.g.I.cs中的代码。我已经在上面发布了。请尝试查看e.ToString以查看完整的堆栈跟踪。这是e.ToString,不确定它是否有用:e.ToString Windows.UI.Xaml.UnhandledExceptionEventTargets Strings请告诉我们您是如何处理全局异常的。嗨@JohnSaunders我错误地认为我继承了一些全局异常处理代码,但这只是在App.g.i.cs中插入的自动代码。我已经在上面发布了它们。请尝试查看e.ToString以查看完整的堆栈跟踪。这是e.ToString,不确定它是否有用:e.ToString Windows.UI.Xaml.UnhandledExceptionEventArgs Strings将其更改为抛出对于OP的情况实际上不是必需的。“异常”对话框同样适用于未捕获的异常,堆栈跟踪将显示问题所在,以及代码的名称。@Johns了解,我猜OP在某个时候捕获并记录异常,抑制“用户未处理的异常”对话框。我不会这样假设,但可能会这样。可能正在记录ex.Message.Thank@jgluie!这在VS 2013中非常有效,并指出了异常的确切行。将其更改为抛出实际上对于OP的情况来说并不是必需的。“异常”对话框同样适用于未捕获的异常,堆栈跟踪将显示问题所在,以及代码的名称。@Johns了解,我猜OP在某个时候捕获并记录异常,抑制“用户未处理的异常”对话框。我不会这样假设,但可能会这样。可能正在记录ex.Message.Thank@jgluie!这在VS 2013中非常有效,并指出了异常的确切位置。当我查看调用堆栈时,我只看到一堆无法识别的消息,如下所示:App.exe!App.App.InitializeComponent.AnonymousMetho
d__9对象发送器,Windows.UI.Xaml.UnhandledExceptionEventArgs e第50行C[本机到托管转换]Windows.UI.Xaml.dll!DirectUI::CFTMEventSource::Raisestruct Windows::UI::Xaml::IAApplication*,结构Windows::UI::Xaml::IUnHandleExceptionEventTargets*未知完整堆栈跟踪是什么?完整的跟踪将包括调试器异常帮助程序显示给您的行。调用堆栈窗口中大约有40行,但没有一行比我复制的更具描述性。我确实看到了这一行,我不确定这是否是这些神秘信息的原因:[下面的框架可能不正确和/或缺失,没有为mscorlib.ni.dll加载符号]我不想让它具有描述性。我的意思是,知道如何跟踪堆栈跟踪的人应该能够查看它,并找到带有错误的确切代码行。当我查看调用堆栈时,我只看到一堆无法识别的消息,如下所示:App.exe!App.App.InitializeComponent.AnonymousMethod_uuuu9Object sender,Windows.UI.Xaml.UnhandledExceptionEventArgs e行50 C[本机到托管转换]Windows.UI.Xaml.dll!DirectUI::CFTMEventSource::Raisestruct Windows::UI::Xaml::IAApplication*,结构Windows::UI::Xaml::IUnHandleExceptionEventTargets*未知完整堆栈跟踪是什么?完整的跟踪将包括调试器异常帮助程序显示给您的行。调用堆栈窗口中大约有40行,但没有一行比我复制的更具描述性。我确实看到了这一行,我不确定这是否是这些神秘信息的原因:[下面的框架可能不正确和/或缺失,没有为mscorlib.ni.dll加载符号]我不想让它具有描述性。我的意思是,知道如何跟踪堆栈跟踪的人应该能够查看它,并找到带有错误的确切代码行。