Out-of-Process-Debugger für C ++ in Visual Studio 2019

Visual Studio 2019 Preview 1 führt einen verbesserten Debugger für C ++ ein, der einen externen 64-Bit-Prozess zum Hosten seiner ressourcenintensiven Komponenten verwendet. Wenn Sie beim Debuggen von C ++ - Anwendungen zuvor Speicherprobleme hatten, sollten diese Probleme jetzt mit Visual Studio 2019 weitgehend behoben werden.

Unten finden Sie ein praktisches Beispiel für das Debuggen von Gears of War 4.



Hintergrund


C ++ - Entwickler gaben Feedback und sprachen häufig über die Probleme, die mit einer hohen Speichernutzung beim Debuggen komplexer C ++ - Anwendungen verbunden sind. Ein hoher Speicherverbrauch ist mit einer großen Menge von Symboldaten verbunden, die der Debugger laden und im Debugger-Fenster anzeigen muss. Darüber hinaus wächst die Menge dieser Informationen während der Arbeit ständig. Letztendlich kann der Visual Studio-Prozess aufgrund von Speichermangel fehlschlagen.

Wir haben in Visual Studio 2017 erhebliche Verbesserungen vorgenommen, um dieses Problem zu beheben. Mit Update 15.6 wurde beispielsweise die Speicheroptimierung für / Debug: fastlink eingeführt, was zu einer Reduzierung des Speicherverbrauchs durch den Debugger um 30% führte. Da wir dieses Problem in Visual Studio 2019 vermeiden möchten, haben wir speicherintensive Komponenten in einen separaten 64-Bit-Prozess verschoben.

Fallstudie: Debuggen von Gears of War 4


Wir haben eng mit internen und externen Partnerteams zusammengearbeitet, um sicherzustellen, dass die am Debugger vorgenommenen Änderungen in großen, realen Anwendungen validiert und validiert wurden. Unten haben wir das Video vom cdpv dupliziert. Es zeigt einen parallelen Vergleich der Speichernutzung zwischen Visual Studio 2017 und Visual Studio 2019 beim Debuggen von Gears of War 4, das von The Coalition entwickelt wurde. Die Speichernutzung von Visual Studio 2017 wird nach einigen Minuten Anzeigen des Spielcodes und Überprüfen der Variablen auf 1,3 GB erhöht. Visual Studio 2019 bietet im selben Szenario eine viel bessere Speichernutzung: Die verwendete Speichermenge bleibt bei rund 285 MB, da Symboldaten in einem 64-Bit-Debugger-Workflow gespeichert werden.



Alles funktioniert jetzt auch zur Laufzeit viel besser.

Nicht unterstützte Szenarien und einige bekannte Probleme


  • Diese Funktion wird unter 32-Bit-Windows nicht unterstützt.
  • Symbole für C ++ / CLI-Module werden noch geladen
  • Veraltete C ++ Expression Evaluator-Add-Ons ( hier ein Beispiel) werden in diesem Modus nicht unterstützt.

Wenn Sie den In-Process-Debugger weiterhin verwenden müssen, können Sie die Funktion deaktivieren, indem Sie auf der Registerkarte "Debugging" unter "Extras" -> "Optionen" die Option "Debug-Symbole in externen Prozess laden (nur native)" deaktivieren.



Die Mitarbeiter der Microsoft Developer Community @msdevru, dem Kanal der Microsoft Developer Community für Entwickler und alle, die sich für neue Technologien interessieren, haben uns bei der Vorbereitung dieses Artikels geholfen.

Source: https://habr.com/ru/post/de433992/


All Articles