2012-03-27 151 views
17

據我現在的理解,使用遠程調試程序的唯一方法是啓動目標應用程序,然後通過Visual Studio附加到它。有沒有辦法從程序的一開始就捕獲所有的斷點?我的程序中有需要調試的代碼,並且我永遠無法將調試器連接得足夠快以捕獲執行代碼。Visual Studio在應用程序啓動時進行遠程調試

+0

@HaraldDutch在這裏描述了一個很好的解決方案:http://stackoverflow.com/questions/19512041/remote-debugging-how-to-start-the-debugging-process-on-a-different-computer – eFloh 2016-06-23 07:51:39

回答

13

如果你可以改變的代碼,嘗試注入這行代碼在您的應用程序的起點:

System.Diagnostics.Debugger.Launch(); 

當這條線被擊中它會提示你連接一個調試器,有效地等着你回覆。由於您正在使用遠程調試器,因此您應該能夠在該位置進行連接,然後取消對話框。希望這可以幫助。

+0

好的答案。謝謝! – Tim 2012-03-28 12:16:10

+1

不應該是'System.Diagnostics.Debugger.Launch();'?這是一個沒有參數的方法調用,並且像任何語句一樣在末尾需要分號。 – 2016-07-14 20:01:29

3

使用Visual Studio Pro 2010構建.NET 4應用程序,這不適用於我。

顯然,這是一個已知的bug:

https://connect.microsoft.com/VisualStudio/feedback/details/611486/debugger-launch-is-now-crashing-my-net-application-after-upgrading-to-net-4-0

A(有點哈克)解決方法這是爲我工作的那一刻只是到了該應用扔了一個MessageBox()在一開始主窗口初始化:

public partial class MainWindow : Form 
{ 
    public MainWindow() 
    { 
     // To allow you time to attach a remote debugger ... 
     MessageBox.Show("Please attach debugger"); 

     InitializeComponent(); 
     ... 

現在,您可以在閒暇時附加VS遠程調試器,然後在消息框中單擊「確定」。

醜但功能。

7

解決方案

System.Diagnostics.Debugger.Launch 

並沒有爲我工作,要麼。不過,我設法解決我的問題,在我的應用程序中編寫啓動以下:

while (!System.Diagnostics.Debugger.IsAttached) 
    System.Threading.Thread.Sleep(100); 

這樣的應用程序將等待,直到調試程序連接。

+0

這是一個很好的解決方案。在'''#ifdef DEBUG'''和'''endif''中打包,不會干擾發佈版本在我的機器上進行調試時完美無瑕。但是當我需要遠程調試時,它只是等待。謝謝! – ecth 2018-02-01 07:46:45

相關問題