2010-09-05 60 views
1

我正在處理幾十萬行代碼,而且我很難在這個進程訪問某個特定文件。我已經放棄了搜索代碼,我只是找不到。當一個進程訪問一個文件,或者從一個進程獲取一個文件訪問的調用堆棧時進入調試器

所以,我在這裏 - 問一個問題,我幾乎可以肯定沒有簡單的解決方案。

我試過從SysInternals的FileMon,ProcMon,雖然我可以看到文件被訪問,但它不顯示調用堆棧或任何有用的信息。

我希望當發生這種情況時我可以進入調試器;我想也許我可以爲FileMon編寫一些擴展,在發生訪問時向我發出信號,然後我可以將一個Debug.Break放入我的進程中。

任何洞察力或想法讚賞。

回答

1

在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

0

該程序是由該程序創建的還是預先存在的?如果你重命名磁盤上的文件會發生什麼,也許這可能會幫助你獲得堆棧跟蹤?如果它是由程序生成的,那麼文件名將遵循特定的模式,也許你可以查找填充該模式的格式字符串,例如「c:\%d-%d-%d.txt」,然後查找使用此字符串的行。

相關問題