2010-04-30 63 views
6

考慮下面的代碼:my code http://i44.tinypic.com/28hhdw4.jpg見返回值

正如你可以看到我們是在第28行有沒有辦法看到此時函數的返回值,而不讓代碼返回到調用者函數?

Foo.Bar()是一個函數調用,它產生一個唯一的路徑(例如)。所以它不是恆定的。

進入Foo.Bar()在immidiate窗口也不管用,因爲這重新評估代碼:

?Foo.Bar() 
"80857466" 
?Foo.Bar() 
"2146375101" 
?Foo.Bar() 
"1106609407" 
?Foo.Bar() 
"792759112" 

在VB.NET有可能通過在觀察,在進入函數的名稱,其將會威脅它作爲一個變量。

但在C#中這是不可能的,任何其他的提示?

PS:重寫不是一個選項。

+2

yup ..只需選擇Foo.Bar()並右鍵單擊它並轉到快速監視。 – Malcolm 2010-04-30 08:13:35

+0

@Malcolm:快速查看重新評估。你可能會得到一個不同的響應,這取決於'Bar()'的作用。 – 2010-04-30 08:16:32

+0

我同意你的觀點,但是如果他把斷點設置爲cgreeno,就像下面的答案一樣。 :) – Malcolm 2010-04-30 08:46:02

回答

3

答案在這裏找到:VS get returned value in C# code?

它實際上是可見的。調試+其他 Windows +寄存器。查看EAX的值 (x64中的RAX)。 EAX寄存器返回 簡單整數類型的值。 EDX長:EAX。 STx中的浮點(x64中的XMM00)。

+2

是的,但是什麼關於對象? – Snake 2010-04-30 08:27:39

+0

你是對的,對物體沒有太大的幫助。您可以隨時查詢存儲在該寄存器中的地址的查詢內存,但這並不容易!我找不到任何替代品,所以我猜你必須在返回之前將結果存儲在變量中。查看鏈接SO問題的答案,以便您可以要求MS爲此做一些事情。 – 2010-04-30 08:36:04

+0

好的,謝謝:) – Snake 2010-04-30 08:45:58

2

假設您正在使用visual studio,可以使用Immediate window。如果你輸入Foo.Bar();在即時窗口中,如果您不希望它在第一次評估或在Foo.Bar()本身進行評估之前,重新評估合適的點IE中的某個斷點,則會得到您之後的結果。