2012-08-13 39 views
-1

我已經創建了一個方法,根據傳遞的命令行參數給出不同的消息框輸出結果。在調試時可以更改命令行參數嗎?

目前我必須開始調試每次我想改變命令行參數字符串。

有沒有辦法在調試會話期間更改命令行參數?

編輯:我已經添加了一些示例代碼

private static class MyParsers 
    { 

    public static List<string> args; 

    static MyParsers() 
    { 
     args = Environment.GetCommandLineArgs().ToList(); 
    } 

     public static List<string> ParseOptions() 
     { 
      return ParseOptions(true); 
     } 

     public static List<string> ParseOptions(bool caseSensitive) 
     { 
      return caseSensitive 
        ? args 
        : args.MyExtToLower(); 
     } 

     public static bool OptionExists(string option) 
     { 
      return OptionExists(option, true); 
     } 

     public static bool OptionExists(string option, bool caseSensitive) 
     { 
      return caseSensitive 
         ? ParseOptions().Contains(option) 
         : ParseOptions().MyExtToLower().Contains(option); 
     } 

     public static bool OptionExists(string option, string delimiter) 
     { 
      return OptionExists(option, false, delimiter); 
     } 

     public static bool OptionExists(string option, bool caseSensitive, string delimiter) 
     { 
      var args = ParseOptions(caseSensitive); 
      for (var i = 1; i < args.Count; i++) 
      { 
       if (args[i].Contains(option + delimiter)) return true; 
      } 
      return false; 
     } 
} 

然後我打電話MessageBox.Show(MyParsers.OptionExists("/list","=").ToString());

如果在命令行參數是/列表=等等返回true。

如果命令行參數是/listary它將返回false。

你會建議什麼方法來快速改變命令行參數?考慮到我正在使用的上述代碼,請參考

+1

在VS2010中,您可以在處於中斷點時將鼠標懸停在相應變量上,然後單擊要修改的屬性值,從而更改所需值。 – verdesmarald 2012-08-13 09:00:14

+0

@eyossi代碼無關緊要。我只需要在調試時更改傳遞給應用程序的命令行參數。 – IneedHelp 2012-08-13 09:08:49

+0

@veredesmarald是的,我知道,但我沒有在任何變量中存儲命令行參數,並且在調試時項目屬性的命令行參數部分變灰。一旦程序運行, – IneedHelp 2012-08-13 09:09:18

回答

1

進程啓動的命令行不能更改。但是,您可以在應用程序的早期將參數複製到易於訪問的「設置」對象中,然後對其進行操作。

編輯:而不是每次調用它們時解析命令行的對象中的屬性,將屬性更改爲常規屬性。然後有一個Initialise方法(或使用構造函數,甚至),以便在啓動時只分析命令行一次。然後,您可以使用立即窗口隨意更改屬性的值,因爲它們不會每次都返回到命令行。

+0

好吧,所以我明白,啓動過程的命令行不能更改。考慮到我在編輯的問題中提供的代碼,您如何建議我實現一個易於訪問的「設置」對象? – IneedHelp 2012-08-13 09:40:16

+0

@IneedHelp:查看我的編輯建議。 – 2012-08-13 09:43:27

+0

感謝您的更新。我試過只在構造函數中保存參數列表,但我不知道如何從立即窗口更改參數列表元素。我用新代碼編輯了這個問題。我仍然做錯了嗎? – IneedHelp 2012-08-13 10:11:59

2

問題不在於改變命令行參數,而在於重新執行已經用不同參數執行的代碼。從我的理解你需要用不同的命令行參數來測試你的程序。請考慮以下的解決方案,以實現自己的目標:

  • 定義一些方法(PerformMain),將接受string[] args就像Main方法確實
  • 這種方法應該執行先前保持內部Main方法的代碼
  • Main 5月包含字符串[],這些測試用例列表在你的String []的列表來執行
  • 你循環和執行包裝每一次傳遞不同的參數
  • 但是要注意,在PerformMain代碼包裝必須是「無狀態」,這樣連續執行將正常工作
  • 這種方式,您可以輕鬆地測試例hunderds

您的代碼可能是這樣的:

static void Main(string[] args) 
{ 
    List<string[]> testCases = new List<string[]>(); 
    testCases.Add(new string[] { "/test", "xx" }); 
    testCases.Add(new string[] { "/other" }); 

    foreach (string[] testCase in testCases) 
     Program.PerformMain(testCase); 
} 

static void PerformMain(string[] args) 
{ 
     // clear state of program 
     // execute according to args 
} 
+0

投票有幫助,將你的邏輯轉移到另一個函數中就是你需要做的事情,就像這裏所顯示的那樣..儘管我仍然考慮使用立即窗口和調用PerformMain的一個斷點,所以你可以操縱飛,點無國籍非常重要 – 2012-08-13 09:23:30

+0

@Kuba Wyrostek:謝謝你的回答。 +1 – IneedHelp 2012-08-13 10:38:02