4 Stimmen

Irgendeine Möglichkeit, UI-Thread kurz laufen, wenn Nicht-UI-Thread im Debugger gestoppt wird?

Gibt es beim Debuggen von Hintergrund-Threads mit Visual Studio 2010 eine gute Möglichkeit, andere Threads für ein paar hundert Millisekunden oder so laufen zu lassen, ohne einen Thread voranzutreiben, der an einem Haltepunkt sitzt? Entspricht das in der Wirkung dem Einfügen von "Threading.Thread.Sleep(100)" direkt vor der aktuellen Zeile, dem Setzen der nächsten Anweisung dort und dem Drücken von resume (aber ohne den zu debuggenden Code zu hacken)? Mein Code für die Paketprotokollierung und -anzeige ist nicht so nützlich, wie er sein könnte, da der Debugger oft einen Haltepunkt zwischen dem Zeitpunkt, an dem mein Code auf ein Paket reagiert hat, und dem Zeitpunkt, an dem die Benutzeroberfläche es angezeigt hat, erreicht.

Ich weiß, dass es möglich ist, in das Threads-Fenster zu gehen, den Thread, der den Haltepunkt erreicht hat, einzufrieren, zu starten, zu pausieren und den Thread, der den Haltepunkt erreicht hat, wieder aufzutauen, aber das ist wirklich umständlich. Gibt es einen einfacheren Weg, die Dinge zu tun?

(Bearbeiten)Warum keine Antwort, frage ich mich? Ich kann nicht glauben, dass ich die einzige Person bin, die versucht, Nicht-UI-Thread zu debuggen.

3voto

Dean Taylor Punkte 36498

Ich würde eine Makro in Visual Studio, um Aktionen wie die von Ihnen beschriebene durchzuführen.

Es sollte eine einfache Angelegenheit sein, das Makro aufzuzeichnen ( Tools , Macros , Record TemporaryMacro ) zum richtigen Zeitpunkt und speichert sie dann.

Sie können jederzeit ein Symbol/Tastenkürzel hinzufügen, um das Makro zu einem späteren Zeitpunkt erneut auszuführen.

Oder Sie können sogar den Quellcode des Makros anpassen, um sicherzustellen, dass es die gewünschte Aktion genau so ausführt.

EDIT #1: Als Anhaltspunkt könnte ich mir vorstellen, dass der Code in etwa so aussieht (nicht getestet):

    Dim t As Thread
    t = DTE.Debugger.CurrentThread
    t.Freeze()
    DTE.Debugger.Go(False)
    Beep()
    Threading.Thread.Sleep(5000)
    Beep()
    DTE.Debugger.Break(True)
    DTE.Debugger.CurrentThread = t;
    t.Thaw()

EDIT #2: Vielleicht möchten Sie das hier nachlesen: EnvDTE.Debugger

Standardimporte zu Ihrer Information:

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X