2014-07-01 64 views
3

我遇到了一個棘手的小問題。我有一個編譯的C#可執行文件,在批處理文件中使用參數調用。我想通過VS2012調試器運行此可執行文件,但是我不確定如何將調試器附加到可執行文件,因爲它是從批處理腳本運行的。如何調試在該上下文中由批處理文件調用的可執行文件?

我無法將批處理腳本設置爲項目的調試啓動文件(僅.exes),並且我發現與批處理文件關聯的唯一過程是cmd.exe,該過程不允許進行調試。我已經在批處理腳本的開頭添加了一個pause,所以理想情況下該進程應該正在運行,並且我應該可以附加它,但是我找不到預期名稱的任何內容。

任何人都知道如何做到這一點?這似乎是一個非常簡單的問題,但我無法弄清楚如何進入調試器。

+2

你就不能提供相同的命令行參數屬性|調試|啓動選項和調試應用程序呀? –

+0

我可以,參數會很好,但我也試圖測試註銷輸出/異常正確發生,這是在批處理文件中處理。可執行文件中的控制檯輸出會被轉錄爲文件,並且我希望確保這種方式在批處理腳本的上下文中正常工作。 – UpQuark

+0

在可執行文件中添加暫停(如果需要,請使用'#If DEBUG')給您足夠的時間在Visual Studio中附加調試器。 –

回答

2

添加這行:

System.Diagnostics.Debug.Fail("stopping!");

到一個好地方在你的代碼。運行你的應用。點擊「重試」,你會被提示輸入一個調試器。選擇 Visual Studio。

編輯

jp.gauthier的使用System.Diagnostics.Debugger.Launch();解決方案是乾淨多了。取而代之的是Upvote。 :)

1

這裏有兩件事:你不能使用VS調試器調試批處理腳本。所以,當你的exe返回的結果是由腳本拿起,但你不能單步低谷。要調試批處理腳本,請使用pause命令對其進行洪泛處理,並留下echo on以查看發生了什麼。

要從腳本啓動時附加到您的exe文件,有幾種可能性。一種是(臨時)修改exe以在啓動時等待一段時間(幾秒鐘左右),以便您有時間附加調試器。如果你想的話,甚至還有一個Win32函數來檢查調試器是否被連接。我記得曾經看到過使用註冊表自動啓動調試程序的可能性,但現在我不記得確切的程序。

編輯:Here's一個話題描述了這個想法總之(答案1)。

0

Windows通過設置註冊表值Image File Execution Options (MSDN)來爲任何可執行文件啓動調試器。本文將描述您需要的內容:啓動Visual Studio作爲調試器。

  1. 創建密鑰HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<Yourapp>.exe
  2. 創建一個名爲Debugger
  3. 將值設置字符串devenv /debugexe

不要忘記在完成時將其刪除。

相關問題