2011-10-04 79 views
0

我強制崩潰進程並嘗試分析故障轉儲。 我面臨崩潰過程和崩潰轉儲生成(刷新)之間的競爭條件。崩潰轉儲完成通知

如果崩潰轉儲太大,那麼它需要一些cputime,有沒有在Windows調試器(或watson),可以告訴崩潰轉儲完成的任何回調函數?

或者是否有任何機制可以通過它強制沖刷崩潰轉儲並開始分析。

我不是在尋找基於輪詢的解決方案。

+0

這沒有任何意義,沒有什麼需要「刷新」。當MiniDumpWriteDump()返回時轉儲完成。 –

+0

嗯,我不是調用MiniDumpWriteDump(),我只是把Windows註冊表項放在崩潰轉儲的錯誤報告中,並使進程崩潰。我期待Windows的相應進程會崩潰崩潰。此外,我不知道如何跟蹤MiniDumpWriteDump(),如果它由Windows調用。 – praveenCrawler

+0

我正在執行以下步驟: 1.在Windows崩潰轉儲對應的錯誤報告(wer)下添加註冊表項。2.崩潰給定pid 的進程3.等待OS自動生成崩潰轉儲? (這是問題所在) 4.分析故障轉儲文件 – praveenCrawler

回答

0
  1. WER添加註冊表項
  2. 碰撞過程
  3. 運行您的自寫的工具,它 3A)發現werfault.exe過程和 3B)加入對過程(等待,直到它完成)
  4. 分析轉儲文件

步驟3b不使用輪詢。進程是獲取信號的同步對象。

請注意,步驟3a在崩潰之前不會工作,並且如果故障轉儲很小,werfault.exe可能已經退出,因此可能會一直等待。要繞過這一點,您可能需要將您的應用程序註冊爲werfault.exe的調試程序,該程序在內部將參數轉發給werfault.exe,然後等待完成。

完整序列則是這樣的:

  1. WER添加註冊表項
  2. 添加調試器條目werfault.exe
  3. 碰撞過程
  4. 相反werfault.exe的,你的應用程序跑。 4A)開始werfault.exe創建轉儲和 4B)加入對過程(等待,直到它完成)
  5. 也許去除調試項,如果你不希望它永久
  6. 分析轉儲文件

最後我會說你可以通過一些實施努力來實現你的目標。問題是:這個節省多少秒,你需要多少小時來實施?