C# 调试时是否忽略特定位置的异常?
我们的应用程序正在移动启动期间运行所需的一些文件 应用程序会注意(关闭时)正确停止使用此文件的每个进程 但是,如果应用程序崩溃/或者您只是在VS on Debugging中点击了“stop”,则某些可执行文件可能仍在运行 因此,如果快速重新启动应用程序,可能会发生复制尝试失败的情况,因为文件仍在使用中 对于这种情况,我们只需忽略失败的复制尝试,或者更准确地说,忽略失败的删除尝试,这应该确保最新版本可用:C# 调试时是否忽略特定位置的异常?,c#,debugging,exception,C#,Debugging,Exception,我们的应用程序正在移动启动期间运行所需的一些文件 应用程序会注意(关闭时)正确停止使用此文件的每个进程 但是,如果应用程序崩溃/或者您只是在VS on Debugging中点击了“stop”,则某些可执行文件可能仍在运行 因此,如果快速重新启动应用程序,可能会发生复制尝试失败的情况,因为文件仍在使用中 对于这种情况,我们只需忽略失败的复制尝试,或者更准确地说,忽略失败的删除尝试,这应该确保最新版本可用: foreach(String entry in contents) { if (Sy
foreach(String entry in contents)
{
if (System.IO.File.Exists(entry))
{
try
{
System.IO.File.Delete(entry);
}catch (Exception e)
{
//ignore during this startup.
}
}
}
现在,这可以很好地工作,因为有一个文件版本可供使用,而生产版本只是忽略了异常
恼人的问题是,调试器每次“中断”时都会发生此错误
- 我们一般不想“忽略”调试时抛出的任何
System.IO.IOException
- 我们试图用
对有问题的方法进行注释,该注释有效,但会导致在调用方位置捕获异常李>[System.Diagnostics.DebuggerStepThrough()]
那么,有没有一种方法可以忽略在某一行代码中引发的“某些”异常,即使启用了该类代码的常规“中断”功能 一些
#if(DEBUG)
-指令将避免在这一特定代码行捕获异常
比如:
foreach(String entry in contents)
{
if (System.IO.File.Exists(entry))
{
try
{
#if (DEBUG:NoThrow)
System.IO.File.Delete(entry);
#endif
}catch (Exception e)
{
//ignore during this startup.
}
}
}
我仍然对答案感兴趣,因为它有“许多”用例 就目前而言,我们使用了以下“解决方法”:检查,如果文件在3分钟内被访问,则不要尝试删除它。 (用于调试模式!) 请记住,实际问题只与“调试器”有关,而不是与生产相关,在生产环境中,对于某一行代码,异常很容易被捕获(并忽略)
foreach (String entry in contents)
{
if (System.IO.File.Exists(entry))
{
try {
#if (DEBUG)
FileInfo fi = new FileInfo(entry);
if (fi.LastAccessTime < DateTime.Now.AddMinutes(-3))
{
#endif
System.IO.File.Delete(entry);
#if (DEBUG)
}
#endif
}
catch (Exception e)
{
//ignore
}
}
}
我们只是想避免在这一行代码中忽略异常时出现“调试器中断”
foreach (String entry in contents)
{
if (System.IO.File.Exists(entry))
{
try {
#if (DEBUG)
FileInfo fi = new FileInfo(entry);
if (fi.LastAccessTime < DateTime.Now.AddMinutes(-3))
{
#endif
System.IO.File.Delete(entry);
#if (DEBUG)
}
#endif
}
catch (Exception e)
{
//ignore
}
}
}
foreach(目录中的字符串条目)
{
if(System.IO.File.Exists(条目))
{
试一试{
#如果(调试)
FileInfo fi=新的FileInfo(条目);
if(fi.LastAccessTime
这不是一个解决方案,它是一个变通方法,可以将这行代码中的调试器中断减少99%,以防您在VisualStudio中“停止”调试 与其说是源代码级解决方案,不如说配置MSV?这可能会有所帮助:。另外,您可以考虑对自己的异常进行子类分类,并有选择地重新抛出“自定义异常类型”(包括“实际异常”为“嵌套异常”)@ PulsM4MSV只是显示“继续未处理”的选项-我们需要“继续处理”-也仅在IDE中执行的配置对于一个更大的团队来说有点不方便-一旦提交,基于代码的调试器指令将解决每个人的问题。ps:在这种情况下,我们可以使用更多的IO操作来避免异常,但例如“ThreadAbortException”每次都会抛出-我们可能只对某些线程感兴趣(在调试时)…Sidenode,因为我已经尝试了很多:
[DebuggerNonUserCode]
自VS 2015起不再工作-现在它也会在调用方位置抛出/中断。