2010-09-02 124 views
0

我正在使用VB Express 2008.我知道如何判斷代碼是否構建在調試更多或發佈,但現在我想知道如何判斷它是否在Visual Studio IDE中運行(以便我可以添加一些調試MsgBox(),而不用擔心它們會顯示我是否意外地發佈了調試版本)。如何判斷(VB)代碼是否在Visual Studio中運行?

+0

爲什麼你不試試Debug.Assert? - http://msdn.microsoft.com/en-us/library/kssw4w7z.aspx – 2010-09-02 02:34:42

+0

因爲它「檢查條件;如果條件爲false,顯示一個消息框顯示調用堆棧」,我不想要調用堆棧。在Borland產品中檢查在IDE中運行是否夠簡單,所以我希望它也可以在VS 2008中使用。 – Mawg 2010-09-02 02:46:29

回答

1

是System.Diagnostics.Debugger.IsAttached你在找什麼?

+0

當開發人員嘗試調試運行在客戶上的生產代碼時會發生什麼?代碼更改路徑,並認爲它使用您發佈的解決方案從VS IDE運行。檢查附加的調試器只會告知代碼是否附加了活動的調試器,而不是在開發過程中代碼位於IDE中。 – StarPilot 2014-06-06 17:26:42

+0

你有更好的解決方案嗎,@ StarPilot?由於這是被接受的答案,它似乎是OP尋找的解決方案...... – Guy 2014-06-06 21:23:23

+0

只要開發者沒有選擇不使用vshost.exe,代碼就可以檢查它的可執行文件名是否包含vshost 。但是可以選擇退出,所以它不能100%保證準確。正如我上面評論的那樣,問題在於檢查調試是否比在IDE中運行更大的可能性。不幸的是,在VSExtension代碼之外,沒有100%的方法來判斷IDE是否託管運行代碼。 – StarPilot 2014-06-06 22:06:50

1

如果您正在構建Test and Prod,請考慮在代碼中使用預處理器指令。

#If DEBUG Then 
    MsgBox("Foo") 
#End If 

這倒下,當然,如果你出貨調試的二進制到非開發環境。我知道這是從你問這個問題的另一個角度(IDE)來攻擊問題。

1

嘗試,如果你想確保你永遠不會顯示調試信息給用戶,你可以使用Debug.Write()Debug.WriteLine()檢查System.Diagnostics.Debugger

+0

對不起,但@guy打了一分鐘(+1,雖然) – Mawg 2010-09-08 04:12:10

1

IsAttached財產。這些命令將輸出提供給調試輸出窗口的文本。請注意,您可以將調試輸出窗口攻擊到在客戶機器上運行生產代碼的程序,而無需安裝開發環境!

測試連接的調試器並不表示調試器也在IDE中。在很多環境中,將調試器附加到在客戶系統上運行的生產代碼中以識別特定客戶的安裝和使用情況出了什麼問題是相當普遍的。測試一個調試器,然後假設你在一個IDE中將會在生產環境中排除調試器的這種用法。

相關問題