2012-03-27 7 views
17

Jak rozumiem teraz, jedynym sposobem na użycie zdalnego debuggera jest uruchomienie aplikacji docelowej, a następnie dołączenie jej za pomocą wizualnego studio. Czy istnieje sposób na uchwycenie wszystkich punktów przerwania od samego początku programu? W moim programie jest kod, którego potrzebuję do debugowania i nigdy nie będę mógł dołączyć do debuggera wystarczająco szybko, aby przechwycić ten kod wykonawczy.Visual Studio Zdalne debugowanie przy uruchamianiu aplikacji

+0

@HaraldDutch opisuje świetne rozwiązanie tutaj: http://stackoverflow.com/questions/19512041/remote-debugging-how-to-start-the-debugging-process-on-a-different-computer – eFloh

Odpowiedz

13

Jeśli można zmienić kod, spróbuj wstrzykiwanie tej linii kodu w momencie startu aplikacji:

System.Diagnostics.Debugger.Launch(); 

Gdy ta linia jest trafiony zostanie poproszony o dołączenie debuggera, skutecznie czeka na Ciebie reagować. Ponieważ używasz zdalnego debuggera, powinieneś być w stanie dołączyć w tym momencie, a następnie po prostu anulować okno dialogowe. Mam nadzieję że to pomoże.

+0

Dobra odpowiedź. Dzięki! – Tim

+1

Czy nie powinno to być 'System.Diagnostics.Debugger.Launch();'? Jest to wywołanie metody bez żadnych argumentów, i na końcu wymaga średnika, jak każde polecenie. –

3

Z Visual Studio Pro 2010 budując aplikację .NET 4, to nie działa dla mnie.

Najwyraźniej jest to znany błąd:

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

A (nieco hacky) obejście na chwilę, która pracuje dla mnie jest po prostu mieć aplikację zwymiotować MessageBox() na samym początku głównego okna inicjalizacji:

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

     InitializeComponent(); 
     ... 

teraz można dołączyć zdalnego debugera VS w swoim czasie wolnym, a następnie naciśnij przycisk OK w oknie komunikatu.

Brzydki, ale funkcjonalny.

7

Rozwiązanie

System.Diagnostics.Debugger.Launch 

nie działa na mnie też. Jednak udało mi się rozwiązać mój problem pisząc w mojej aplikacji uruchamia się, co następuje:

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

ten sposób aplikacja będzie czekać, aż zostanie dołączony debugger.

+0

To rzeczywiście dobre rozwiązanie. Pakowany w '' '#ifdef DEBUG''' i' '' endif''' nie zakłóca kompilacji wydania i działa bezbłędnie podczas debugowania na moim komputerze. Ale kiedy muszę zdalnie debugować, po prostu czeka. Dzięki! – ecth