2013-04-26 30 views
2

還有就是要執行的代碼部分只有當應用程序從IDE推出了一個辦法?條件,如:如果應用程序從IDE然後啓動(這樣做)其他(什麼都不做)

我想做一個條件,如果應用程序從VS IDE啓動,然後做一件事,但如果應用程序從編譯手動啓動(從Windows資源管理器,單擊編譯的應用程序等),然後做其他的東西。

這可能嗎?

這樣的事情,但改變#調試到(未知的東西...):

Public Class Form2 

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
#If DEBUG Then 
     Me.Location = New Point(Form1.Right, Form1.Top) 
#Else 
     Dim BorderWidth = (Me.Width - Me.ClientSize.Width) 
     Me.Location = New Point((Form1.Location.X + (Form1.Width + BorderWidth)), Form1.Location.Y) 
#End If 
    End Sub 

End Class 

回答

3

你真正想要做的是檢測是否有連接到您的應用程序的進程調試器。

爲了做到這一點,測試System.Diagnostics.Debugger.IsAttached property的價值。如果它返回true,則附加一個調試器。

當然,您可以將Visual Studio以外的調試器附加到該進程,並且仍然會導致IsAttached返回true。你可以(通常可以通過按Ctrl鍵+ F5 )開始從Visual Studio 的應用程序,而不連接調試器,這將導致IsAttached返回false。但有很好的機會,無論你的代碼有條件地執行應在所有情況下運行調試器附加,也應該運行每當一個調試器是連接,無論哪個調試器是。

注意,這是從#If DEBUG不同,因爲該測試是否你正在運行的應用程序的調試版本。調試版本與調試器是否連接無關。您可以在沒有附加調試器的情況下擁有Debug版本,或者將調試器附加到Release版本。

但是,我真的不建議在問題中提出這個建議。如果每次連接調試器時以不同的方式調試窗口,您將如何調試問題?

+0

謝謝你,我有一個愚蠢的問題,如果我在我的操作系統中爲我的應用程序而不是VS調試器選擇一個默認調試器,那麼我有點失去了「調試器附件」調試器是「附加的」?或者只是「定義」?我不能附加在編譯代碼中的knoe,但是,我不知道什麼意思附加一個調試器抱歉。 – ElektroStudios 2013-04-26 22:16:40

+0

@Elektro我不確定你在操作系統中選擇一個默認的調試器是什麼意思。當應用程序崩潰並出現未處理的異常時,操作系統將提示您將驗屍調試程序附加到進程(如果有)。如果安裝了Visual Studio,就會出現這種情況。但調試器在您請求它之前不會連接。否則,當您按下'F5'或以其他方式從VS運行您的應用程序時,調試器會自動連接,無論它是否爲Debug或Release版本。你必須按下'Ctrl' +'F5'才能在沒有附加調試器的情況下啓動,或者在VS之外啓動它。 – 2013-04-26 22:18:54

+0

編譯所有代碼。它必須是爲了執行它。所以這與它無關。 – 2013-04-26 22:19:20

1

添加一個命令行開關啓用額外的功能,並通過在從通過在Visual Studio調試設置?

或者使用System.Diagnostics.Debugger.IsAttached

+0

謝謝! Debugger.IsAttached工作 – ElektroStudios 2013-04-26 22:17:00

相關問題