我發現這個代碼片斷,但是當我調試它不返回true:有沒有C#等價於IsDebuggerPresent()?
[DllImport("kernel32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
internal static extern bool IsDebuggerPresent();
我發現這個代碼片斷,但是當我調試它不返回true:有沒有C#等價於IsDebuggerPresent()?
[DllImport("kernel32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
internal static extern bool IsDebuggerPresent();
你標記你的問題爲C#
所以我假設當說「但是當我正在調試時它不會返回true」,你實際上正在談論託管調試。
IsDebuggerPresent()
函數檢查存在的本機調試器。在你的情況下,你應該使用System.Diagnostics.Debugger.IsAttached
來檢查(託管)調試器是否存在。
有關調試器API的更多信息,另請參閱this blog post。
類似於IsDebuggerPresent()
最.NET Framework的成員顯然是Debugger.IsAttached
,但其內部運作是完全不同的,就像作品從簡單的OutputDebugString
非常不同。
Debugger.IsAttached
請求附加 管理調試器的存在的CLR,並從來沒有困擾以檢查 機調試器的存在。IsDebuggerPresent()
詢問內核是否存在附加的本地調試器,並且不管任何託管調試器的知識。由於Visual Studio的2013年,託管調試器是建立在本機調試的頂部,這樣既IsDebuggerPresent()
和Debugger.IsAttached
調試下VS.託管的應用程序時,應返回true但是,如果您碰巧將Visual Studio附加到託管應用程序並明確將代碼類型覆蓋爲本機,則IsDebuggerPresent()
將返回true,而Debugger.IsAttached
仍然返回false。
最後,這一切都歸結於你正在努力實現的目標。
你想做什麼? –
'#if debug' ??? – SpaceBison
在調試器中運行時只顯示一些按鈕。 #if調試會做!在C++中,我首選IsDebuggerPresent,因爲它簡單地區分開發人員是否正在查看它(在發佈版或調試版中)。 – noelicus