2013-09-23 57 views
2

我運行一個C#控制檯應用程序,例如如下:暫停程序檢查在C#中的變量值

int sum=0; 
for (i=1;i<100000000;i++) 
{ 
    sum+=getSomeAlmostRandomValue(); 
    // if (i%10000==0) 
    // Console.WriteLine(sum/i); 
} 

在簡單的話,我想檢查結果的平均值爲一個大數目的迭代。

在某些時候,我想檢查到目前爲止的平均水平,看看它是如何發展的......但是在迭代中每次檢查IF條件可能都非常笨拙/耗時。 (這只是一個例子來介紹我的問題,我知道我可以將for循環分解爲2個嵌套for循環,以便不具有IF。但是,也許我不想WriteLine每次迭代)。因此,我的真正的問題是:

有沒有一種方法(通過刪除2註釋行)隨意暫停程序並檢查我的變量(I,總和)

+4

這就是所謂的調試,使用斷點和調試模式 – wudzik

+1

「立刻」窗口會解決你的問題條件斷點的組合。 –

+2

在Visual Studio中按下「暫停」菜單按鈕。它應該在開始調試的「Play」按鈕旁邊。 – nvoigt

回答

0

謝謝大家對你的答案,

你讓我進入檢查調試選項,我發現正是我需要的。

什麼解決了我的問題是「全部中斷」按鈕。當我按下它時,程序會暫停,並且我可以將鼠標懸停在變量上並檢查它們的值。

但我使用C#Express 2010,並且「Break All」不在我的工具欄上。所以這是我如何使它:

Tools -> Customize -> Commands -> Toolbar -> Debug -> Add Command -> Debug -> Break All 
1

只需使用的值條件斷點和調試應用程序。例如,您的模數邏輯可以用作斷點條件:

i % 10000 == 0 

這將在每10,000次迭代中達到斷點。

5

有條件的斷點是你的選擇。

右鍵單擊中斷點,在那裏設置條件。 另請參閱MSDN blog

enter image description here enter image description here

+0

感謝您的回答。這個條件斷點是否耗時(在每次迭代中檢查條件)?我想要的是檢查值的意願。例如現在,然後在1分鐘之後,然後在半小時之後 –

+0

@ThanosDarkadakis如果要隨意檢查它們,Visual Studio中調試器工具欄上的暫停按鈕將起作用。 –

+0

是的,我之前寫過這個答案。謝謝 –

0

這看起來成熟一個單元測試,可以斷言正確的價值觀,完全否定了需要定期手動檢查,但我不能幫你那裏,因爲我不知道是什麼這是試圖做的。

在這個特殊的例子中,我會在IDE中使用條件斷點。

但是,如果你想在代碼中做到這一點,你可以使用System.Diagnostics.Debugger類,Break()方法。

也有在System.Diagnostics.Debug類中如AssertFailWriteLineIf有用的方法,,,,等

這將是這個樣子:

int sum=0; 
for (i=1;i<100000000;i++) 
{ 
    sum+=getSomeAlmostRandomValue(); 

    if (i%10000==0) 
     System.Diagnostics.Debugger.Break(); 
} 

Debugger.Break的問題是,它將編譯成發佈代碼,而Debug類方法的大多數(如果不是全部)則以DEBUG編譯器符號爲條件。這個問題可向旁邊跨步使用自己的條件代碼:

#if DEBUG 
    Debugger.Break(); 
#endif 

不過,我傾向於從留在代碼庫的代碼,一旦調試會話完成犯錯了。也就是說,有時候你會發現圍繞一些麻煩的遺留代碼留下一點調試基礎架構可能會在未來派上用場。

-1

如果這是一個不在開發環境中的應用程序,您應該查看生產者 - 消費者模式。有了它,您可以暫停應用程序,同時確保數據在顯示之前完全生成。