小编Jac*_*sey的帖子

抛出异常,除非在断点后运行

尝试删除文件时,我遇到了一些奇怪的行为。下面是一个快速代码示例:

if (File.Exists(filePath))
{
    File.Delete(filePath);
}
Run Code Online (Sandbox Code Playgroud)

奇怪的行为是尝试删除文件时抛出 System.IO.IOException:

System.IO.IOException
HResult=0x80070020
Message=进程无法访问文件“C:\ProgramData\Path\To\File.sqlite”,因为该文件正被另一个进程使用。
来源=mscorlib

在我们的应用程序中,我们仅在 using 语句中访问文件,以避免任何持久保留。该文件是一个 sqlite 数据库,没有持久或打开的连接。

这似乎是一个很正常的问题。当向代码添加断点时,奇怪的行为就开始了。例如,如果我们在上面添加 Console.WriteLine 语句,则在该语句上中断,然后继续:

<x> Console.WriteLine("Break");
    if (File.Exists(filePath))
    {
        File.Delete(filePath);
    }
Run Code Online (Sandbox Code Playgroud)

没有抛出异常。

如果我们像这样添加断点:

    Console.WriteLine("Break");
    if (File.Exists(filePath))
    {
<x>     File.Delete(filePath);
    }
Run Code Online (Sandbox Code Playgroud)

或者像这样:

    Console.WriteLine("Break");
<x> if (File.Exists(filePath))
    {
        File.Delete(filePath);
    }
Run Code Online (Sandbox Code Playgroud)

抛出异常。

除了更改断点之外,一切都运行得完全相同。我们可以可靠地重现这种行为。我对这种行为进行了一些研究,但找不到任何适用的内容。我很好奇这种行为是否在任何地方都有记录,或者我是否遗漏了任何明显的东西。

编辑:我忘记添加一些注释,我们可以在多台不同的机器上重现此行为。添加 aThread.Sleep()不会改变行为。

任何见解都将不胜感激!

.net c# debugging breakpoints

5
推荐指数
1
解决办法
140
查看次数

标签 统计

.net ×1

breakpoints ×1

c# ×1

debugging ×1