簡體   English   中英

如何在調試時獲得返回值?

[英]How do I get the return value while debugging?

我看了看SO,但找不到答案,我確定它在那里雖然......?

在調試時,如果我在其上放置斷點,如何獲取return語句的值? 我喜歡凝聚成一條線,只是看起來很漂亮。 但我目前沒有,因為我無法弄清楚如何調試返回的結果......?

using (IUnitOfWork context = new EFUnitOfWork())
{
    var repo = new ReportRepository(context);
    return repo.GetProcedureReport(startDate, endDate).ToList();
    //return result.ToList();
}

在VS 2013中,您可以將變量$ ReturnValue添加到手表中。 它包含函數的實際返回值。

選擇方法並單擊鼠標右鍵。 從菜單中選擇Quickwatch。

在此輸入圖像描述

我假設你不能在GetProcedureReport放一個斷點?

您正在嘗試的返回值調試類型對於C#等托管語言是不可能的。 C ++調試器通過autos窗口提供此信息,但不提供托管語言。

主要原因是CLR調試引擎根本不提供此值。 對於C#,VB或F#來提供這個,他們需要重寫每個return語句以將值溢出到臨時值然后返回臨時值。 然后可以通過在調試器中顯示臨時值來實現返回值調試。

var returnTemp = repo.GetProcedureReport(startDate, endDate).ToList();
return returnTemp;

這可以工作,但它會給代碼帶來負面影響。 最值得注意的是,大結構值最終會被復制兩次並對性能產生負面影響。 此外,這種重寫需要在編譯時進行,並且會影響正在編譯的每個方法。 如果可以在調試時按需完成,那么影響會小得多。 這些消極因素只是權衡了這里的好處。

請注意,VB.Net確實在很小程度上提供了返回值調試。 我在博客上寫了這是如何工作的

http://blogs.msdn.com/b/jaredpar/archive/2011/01/12/why-the-debugging-difference-between-c-and-vb-net-return-values.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM