2010-09-04 138 views
17

我試圖在C#中使用VS2010構建命令行工具。如何調試C#命令行程序

我的問題是:我如何調試這個,就像我會winforms一樣。
隨着的WinForms,我可以單步執行代碼,看到的值在每個單獨的步驟,等等

然而在這裏,程序只響應當我跟它的命令行。我無法啓動調試會話,因爲這將首先完全啓動該程序。由於程序的性質,它會自行關閉,因爲沒有命令行參數。

所以不會發生調試。

我需要在這裏做什麼?

編輯:一個例子,因爲有人發表評論,讓我覺得這個解釋是必要的。

C:\路徑\爲\文件\ file.exe程式-help

也就是說這個程序是如何不客氣的例子。命令-help與程序啓動的同一行中給出。換句話說,我不能先啓動程序,然後在運行時給它一個命令......因爲它不會再運行了。它會開始,看到它在啓動時沒有任何爭論,因此,關閉它。這就是命令行工具的工作原理。

  1. 激活
  2. 過程可能的參數
  3. 輸出結果
  4. 自動關閉

它不是,直到你點擊右上角的小X是保持運行的東西。

+0

[Visual Studio C#傳遞命令行參數]的可能重複(http://stackoverflow.com/questions/6475887/passing-command-line-parameters-with-visual-studio-c -sharp) – horns 2015-05-04 13:48:06

回答

42

在項目屬性的Debug下,你可以輸入你想要的任何命令行參數,然後用F5運行該應用程序,調試器將被自動附加。

+5

如果你已經*調試過,它們將會變灰。如果您下拉調試菜單,是否啓用「停止調試」?如果是這樣,選擇它,然後你就可以正常設置命令行參數。 – 2010-09-04 23:25:15

1

您可以使用Visual Studio將調試器附加到命令行應用程序,一旦它正在進行正確的參數。我不確定您的應用程序是否會很快終止,或給您任何附加調試程序的機會,但如果可以的話,這應該起作用。

我使用VS2008,但我敢打賭過程中,2010年是類似的:

  1. 在VS,去Tools並單擊Attach to Process
  2. 從列表中選擇您的應用程序,並按下Attach

現在,VS應該能夠在你的應用程序中脫穎而出並打破一個錯誤。

+0

在這種情況下不太可能。命令行應用程序會很快啓動並關閉,以至於他沒有機會以這種方式附加到它上面。上面的建議遠遠優越。 – 2010-09-04 22:50:57

+0

是的。我只是希望,也許會有一個阻塞的輸入,這將使他們有機會附加調試器。但是,由於它接受命令行參數,我認爲這不太可能。 – 2010-09-04 22:53:08

+1

如果他有源代碼,他可以輕鬆插入一個'Console.Readline'來暫停程序足夠長的時間,以便連接調試器。然後按一個鍵,這是關閉的比賽。這在我看來並不值得讚賞,它可以很好地適用於一個簡單的單行變化。 – 2010-09-04 22:55:24

1

您只需要在主函數的第一行添加一個斷點(您可以通過單擊Visual Studio編輯器中的行並按F9來執行此操作),然後按F5啓動調試會話。

+0

或者你可以直接進入程序,不需要明確設置斷點。 – hydrogen 2010-09-04 22:45:48

+0

這就是我原來所做的。我再說一遍:這是一個需要命令行參數的程序。我無法多次輸入它。它在1次運行後關閉。命令的提供和程序的啓動是同時發生的,這是命令行程序的本質所固有的。我將在主帖 – KdgDev 2010-09-04 23:14:10

1

將一個斷點添加到開頭{Main,或者進入程序(調試菜單)。此時,通過選擇主參數(命令行參數),並右鍵單擊/添加監視或者將參數拖動到觀察窗口(如果它已經打開),可以在主參數上設置監視。雙擊Watch窗口中的Value列並將其設置爲您想要的值。

注:添加必須是有效的代碼的價值 - 那就是,一個-help添加到字符串[]你將不得不依賴於你正在使用的版本new string[] {"-help"}new [] {"-help"}輸入。

這比在屬性窗口的調試選項卡中設置參數的優勢是,通過允許每次運行不同的參數而不必返回到屬性窗口。

8

您可以將Debugger.Launch添加到您的啓動代碼。然後,您可以編譯並從命令行啓動您的應用程序。您會得到一個提示,詢問您要附加哪個調試器(通常這將是您安裝的Visual Studio的不同版本的列表),然後離開您。

(但實際上,在項目屬性設置命令行參數> Debug標籤是更好的方式去大部分時間,如果不是爲你工作'S,你應該找出原因。)

+1

中舉個例子System.Diagnostics.Debugger.Break()也有類似的效果。 – stephbu 2010-09-05 03:46:07

-1

當你有命令行參數,那麼你需要按照不同的路線進行調試。轉到項目,然後選擇屬性。在那裏你會看到調試部分,然後給出所需的參數。這樣它會處理傳遞給程序的參數。如果你有多個參數,那麼用空格分隔它們。之後,如果你調試它會直接擊中斷點。有關詳細信息,請點擊此處how to debug c# through command line arguments in visual studio

+0

請先閱讀其他答案。這已經回答了。 – 2015-05-23 18:25:30