当一个进程访问一个文件,或者从一个进程获取一个文件访问的调用堆栈时进入调试器

问题描述:

我正在处理几十万行代码,而且我很难在这个进程访问某个特定文件。我已经放弃了搜索代码,我只是找不到。当一个进程访问一个文件,或者从一个进程获取一个文件访问的调用堆栈时进入调试器

所以,我在这里 - 问一个问题,我几乎可以肯定没有简单的解决方案。

我试过从SysInternals的FileMon,ProcMon,虽然我可以看到文件被访问,但它不显示调用堆栈或任何有用的信息。

我希望当发生这种情况时我可以进入调试器;我想也许我可以为FileMon编写一些扩展,在发生访问时向我发出信号,然后我可以将一个Debug.Break放入我的进程中。

任何洞察力或想法赞赏。

在CreateFile()上设置断点。在main()中写一个,这样你可以很容易地跟踪它,找到API入口点。在单步执行之前切换到反汇编视图。

+1

我试过了 - 这很耗时,我有超过30万次来电。但我想这是唯一的方法。我想知道如果C#代码可能访问它,那么是否也会通过createFile? – mjsabby 2010-09-05 01:35:18

+1

好主人,难怪你找不到它。是的,*全部*文件访问需要经过CreateFile。您的下一个选项是修补它,以便您可以编写代码来比较文件名。使用Detours:http://research.microsoft.com/en-us/projects/detours/ – 2010-09-05 01:39:32

该程序是由该程序创建的还是预先存在的?如果你重命名磁盘上的文件会发生什么,也许这可能会帮助你获得堆栈跟踪?如果它是由程序生成的,那么文件名将遵循特定的模式,也许你可以查找填充该模式的格式字符串,例如“c:\%d-%d-%d.txt”,然后查找使用此字符串的行。