2017-05-25 34 views
0

我有一個屬性類,我需要攔截debuggind評估。如何通過IDE調試器檢測評估

我不知道我該怎麼做。

class Foo 
{ 
    public bool DebugIsAllow { get; set; } = false; 
    public string Value 
    { 
     get 
     { 
      if (!DebugIsAllow && IsDebugging()) throw new Exception(); 
      return "ok"; 
     } 
    } 
    public bool IsDebugging() 
    { 
     return ????? 
    } 

    public void Main() 
    { 
     var v = Value; 
Breakpoint here !!! 
     DebugIsAllow = true; 
Breakpoint here !!! 
    } 
} 

在第一個斷點,如果我爲「V」和「價值」加間諜,我希望看到在監視窗口中:V =「OK」和值=「異常」

而在第二我想在觀察窗口看到:v =「ok」和Value =「ok」

謝謝你的幫助。


編輯:

我嘗試用 「System.Diagnostics.Debugger.IsAttached」 但卻調試器始終高度。不僅當IDE類屬性通過監視窗口。

+0

我們不知道您爲什麼需要這樣做。考慮使用混淆器來讓別人的生活更加困難。 –

+1

如果相關,請考慮使用'[DebuggerDisplay]'屬性(https://msdn.microsoft.com/zh-cn/library/x810d419.aspx)更改在Visual Studio工具窗口中呈現的內容,但它並未設計用於混淆,並且它可以很容易地解決。 –

+0

它不適用於混淆器。實際上,這個屬性附有緩存系統和遠程呼叫系統。我不想調試器觸發遠程調用。但我想讓它在緩存中獲得價值。 屬性[System.Diagnostics.DebuggerBrowsable]可以完全禁用評估。但在這種情況下,我可以輕鬆獲得緩存中的值... –

回答

-1

您可以使用該編譯器指令假設DEBUG常量的定義:

public bool IsDebugging() 
{ 
#if DEBUG 
    return true; 
#else 
    return false; 
#endif 
} 
+0

不,這不起作用。 「調試」常量只會說如果它編譯爲調試或發佈。不是如果它是正常的執行或IDE調試調用... –