2012-05-06 63 views
2

我使用VS 2010 Ultimate開發C#應用程序。 通常,這些應用程序運行很長時間,無需用戶交互,當然,它們通常在內部存在錯誤。在Visual Studio外運行的調試應用程序

不幸的是,應用程序經常會隨機崩潰,而您無法重現錯誤。有時候,我只有「應用程序停止工作」的信息,沒有更多的信息。

我可以在客戶機上安裝Visual Studio,但我不能讓他運行VS並在調試模式下編譯/啓動源代碼!我需要的是啓動VS 應用程序已啓動並崩潰。這似乎是可能的,事實上,當運行時發生異常時,Windows會問你「你想用VS進行調試嗎?」,但是如果我回答YES,那麼VS就會啓動,但是我根本看不到源代碼代碼(它也在PC上),因此我無法檢查導致異常的那行代碼。 VS只是告訴我「源代碼不可用」。實際上,我無法想象Windows如何啓動VS並知道崩潰應用程序的源代碼在哪裏!

有誰知道這個調試場景是如何工作的,以及如何配置?

非常感謝, 西蒙娜

+1

記錄異常詳細信息/調用堆棧很長的路線 – BrokenGlass

+0

可能的重複[如何使用PDB文件](http://stackoverflow.com/questions/72104/how-do-i-use-pdb-files) – BrokenGlass

回答

0

如果你想趕上錯誤,同時運行編譯後的程序,你應該使用某種記錄機制。現在你不需要自己編寫它,爲.NET應用程序設計了一個很好的開源日誌記錄引擎,它被稱爲NLog。它能夠將日誌保存到文件,電子郵件,控制檯或數據庫中,幾乎可以滿足所有需求:)。

希望這有助於:)

+0

Thankyou Ernestas,我知道NLog,但是如果我不知道發生異常的位置,我不知道要記錄什麼,當然,我無法爲每個源代碼行添加日誌行!此外,該軟件是多線程,這使得很難解釋日誌輸出,因爲它是連續的... – user1378544

1

Windbg調試工具解決了這個問題。

轉儲過程狀態並開始使用windbg分析。它給你的異常信息

+0

嗨Rockstart,感謝您的suggestio:只是不知道如何轉儲過程! – user1378544

+0

如果您使用的是WinXP,請使用ProcessExplorer創建轉儲。如果是win7,您可以右鍵單擊任務管理器窗口中的進程並創建轉儲。請看這裏[約翰羅賓斯的博客](http://www.wintellect.com/cs/blogs/jrobbins/archive/2010/06/17/how-to-capture-a-minidump-let-me-count-the -方法。aspx) – Rockstart

1

要從已在運行Visual Studio實例調試中,選擇「調試」菜單項,然後在「附加到進程...」

Attach to Process

接下來,選擇從列表中的可執行文件,按下「附加」(或雙擊),然後您正在調試應用程序。當您選擇「是」並且Windows說源代碼不可用時,這很可能意味着PDB無法加載,因此請確保您已經通過在「模塊」中檢查它來加載模塊的符號「窗格。

+0

我無法連接到該進程,因爲當異常發生時Visual Studio已啓動並自動附加到已崩潰的進程,但這沒關係。無論如何,我要感謝Lander,因爲我不知道Modules面板,並且我在「Source not available」消息下找到了一個表示「查找源代碼」的鏈接:只需單擊並找到源文件,它就可以工作!萬分感謝!! – user1378544

+0

是的,我相信你一次只能有一個調試器實例。拋出異常之前附加,如果你選擇打破這個過程,你可以添加斷點和其他任何你想要的。 – Lander

相關問題