Visual Studio断点-特定文件访问中断

问题描述 投票:7回答:4

从特定文件读取或写入特定文件时,是否有任何使VS调试会话中断的方法?

在这种情况下,我想将其用作探索工具-假设我不知道在大型代码库中的哪个位置访问该文件,或者在哪里设置了文件名-可能会选择它从深处进行大规模配置。

.net visual-studio debugging breakpoints
4个回答
3
投票

[我要做的就是快速破解一个静态类,该类使用FileSystemWatcher class来监听文件创建/更改的事件,并在事件回调中放置一个断点,或在那里对System.Diagnostics.Debugger.Break进行调用。

然后,当它中断时,切换到“线程”窗口,并尝试找到进行实际文件访问的线程和代码段。

如果需要大量使用,请让此类维护要中断的特定文件名的列表,并公开两个公共静态方法:启动和停止侦听特定文件中的更改。

此外,如果您拥有VS2010 Ultimate,则可以在IntelliTrace事件日志中简单地搜索“文件创建”事件的列表。


3
投票

如果您对any对文件的访问感兴趣,而不仅仅是对其写入,FileSystemWatcher将无济于事。

一个简单的解决方案是预先打开文件,并等待其他逻辑对其进行访问,从而触发IOException。您可以使用以下帮助程序类立即中断-或VS的“首次机会异常”功能:

using System;
using System.Diagnostics;
using System.IO;
using System.Threading;

static class DebugHelper
{
    public static void BreakOnFileAccess(string path) 
    {
        var msg = Path.GetFullPath(path);
        msg = "The process cannot access the file '" + msg;
        msg = msg.ToUpper();

        var fs = File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
        new Thread(() => {
            while (true) 
            {   
                Thread.Sleep(Timeout.Infinite);
                // ensure FileStream isn't GC'd as a local variable after its last usage
                GC.KeepAlive(fs);
            }
        }).Start();

        AppDomain.CurrentDomain.FirstChanceException += (sender, e) => {
            if (e.Exception is IOException && 
                e.Exception.Message.ToUpper().Contains(msg))
            {
                Debugger.Break();
            }
        };
    }
}

1
投票

当前我的流程必须是:

  • 在文件中查找文件名或部分文件名
  • 在配置文件中查找文件名或部分文件名
  • 猜测文件名或内容中的对象,在代码库中找到对象,中断方法条目
  • ((如果是xml,请在ReadXml上断开以找出打开位置...)

虽然笨重但确实有效...


0
投票

您可以设置条件断点。

假定您具有存储文件名的字符串变量strFileName。

在读取文件的行上,设置一个断点。右键单击断点,然后单击“条件...”。

在对话框中执行:

strFileName = "TheSpecificFileName.txt"

如果正在读取的文件名可用,则将完成此工作。

© www.soinside.com 2019 - 2024. All rights reserved.