如何在调试输出中显示不会导致"catch"的异常



这可能是一个基本问题,但我一直无法通过搜索找到答案。我有导致将异常写入Output的代码->Visual Studio中的调试窗口。无论如何,我的try...catch正在进行下一行代码。NuGet包除外。

这是否意味着NuGet包中正在发生异常并由NuGet包处理?如何进一步解决此问题?

private void HandleStorageWriteAvailable(IXDocument doc)
{
using IStorage storage = doc.OpenStorage(StorageName, AccessType_e.Write);
{
Debug.WriteLine("Attempting to write to storage.");
try
{
using (Stream str = storage.TryOpenStream(EntityStreamName, true))
{
if (str is not null)
{
try
{
string test = string.Concat(Enumerable.Repeat("*", 100000));
var xmlSer = new XmlSerializer(typeof(string));
xmlSer.Serialize(str, test);
}
catch (Exception ex)
{
Debug.WriteLine("Something bad happened when trying to write to the SW file.");
Debug.WriteLine(ex);
}
}
else
{
Debug.WriteLine($"Failed to open stream {EntityStreamName} to write to.");
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
}

异常发生在using (Stream str = storage.TryOpenStream(EntityStreamName, true))行。当异常发生时,代码继续到下一行,而不是捕获。

如果该异常由其他人处理,这是正常行为吗?我以前从未见过这种情况。

通常,会设计一个名为TrySomething的方法,使其不会抛出异常,而是返回某种错误代码。

例如,检查Dictionary类:它有一个Add方法,如果键已经存在,它可以抛出ArgumentException,而TryAdd方法只返回false。

很可能,TryOpenStream的IStorage实现也有一个OpenStream方法,Try版本只是一个Try/catch包装器,它在出现错误时将错误输出到控制台。

你怎么知道它发生在那一行?然而,存在一种设置,该设置使得能够在";异常设置";对话框(Ctrl+Alt+E(。对于您可以控制的每种类型的异常。以下是解释其工作原理的链接:https://learn.microsoft.com/en-us/visualstudio/debugger/managing-exceptions-with-the-debugger?view=vs-2022

最新更新