7

nicht Wir erstellen eine Lösung für die Veröffentlichung, aber beim Versuch, mit Studio 2010 Professional anfügen, zeigt keine Thread Stack-Informationen, noch kann ein Breakpoint gesetzt werden usw.Kann Debug-Anwendung im Veröffentlichungsmodus auch mit DebugType = full

Ziel ist es, den Visual Studio/JIT-Debugger an den laufenden Prozess anhängen zu können und dabei so viele Optimierungsvorteile wie möglich zu erzielen.

Die meisten unserer Suchen gehen auf 'kompilieren mit debug: full' und Sie können debuggen, aber das scheint nicht der Fall zu sein, ich denke, dass die JIT den Code in Laufzeit und damit wir optimiert kann nicht debuggen, ist das wahr? Ist es möglich zu kompilieren und dem JIT mitzuteilen, die Optimierungen herunterzuspielen und das Debuggen zu erlauben? (Unter Beibehaltung andere Optimierungen)

UPDATE

mit @ HansPassant Antwort, schaute ich auf den Modulen und sah, dass, obwohl die PDBS im selben Verzeichnis wie die Binärdateien sind in der Tat keine Debug-Symbole geladen wurden. Was ich auch gesehen habe, ist, dass meine Bibliotheken als 'Benutzercode' markiert sind - 'NEIN', was wahrscheinlich der Grund ist, dass sie nicht automatisch geladen wurde. Durch das Laden von Symbolen manuell UND deaktivieren 'Just-my-code' Ich konnte auch Breakpoints setzen und Stacks sehen.

Frage jetzt: Warum ist mein Code nicht als User Code markiert? ist das normales Verhalten? kann ich dies auf irgendeine Weise für meine Assemblys konfigurieren, um dies zu vermeiden?

+0

'noch ein Haltepunkt kann gesetzt werden' <- warum nicht? Ist es die 'no matching symbols can found' Fehlermeldung msg? – wal

+0

@wal Bitte beachten Sie die aktualisierte Frage, es war eine Kombination aus fehlenden Symbolen und 'Just-my-code' deaktiviert –

Antwort

13

Das Debuggen von optimiertem Code ist keine große Freude. Sie haben sicherlich Probleme beim Setzen von Haltepunkten, eine Methode wurde möglicherweise inline. Und wenn lokale Variablen und Methodenargumente untersucht werden, wird der Debugger wahrscheinlich schmollen, wenn die Variable für die Speicherung in einem CPU-Register optimiert wurde.

Sie können jedoch sicher Call-Stacks überprüfen, Sie werden die Methoden sehen, die nicht in den Stack-Trace eingezeichnet wurden. Grundlegende Fehler, die Sie möglicherweise machen:

  • Wenn Sie einen Debugger anfügen, erhalten Sie die Option, den Debugger-Typ auszuwählen. Achten Sie darauf, "Managed" zu wählen, Sie werden nicht viel nützen für den nativen Debugger
  • sicher sein, dass Sie auf den richtigen Thread schauen, kann das Programm an einem beliebigen Ort gebrochen werden. Verwenden Sie Debug + Windows + -Threads, um den entsprechenden Thread auszuwählen
  • stellen Sie sicher, dass Sie tatsächlich an einer Position in Ihrem Code defekt sind. Sie können leicht in eine Windows-Betriebssystem-DLL oder eine Framework-Methode enden, es wird sehr wenig zu sehen sein, wenn das der Fall ist. Werkzeuge + Optionen, Debugging, Symbole und aktivieren Sie den Symbol-Server, so dass Stack-Traces, die innerhalb von Windows starten, genau sind
  • der Debugger muss in der Lage sein, die PDB-Dateien zu finden. Wenn Sie Debug + Windows + Module verwenden, werden die Assemblys im Prozess geladen. Stellen Sie zuerst sicher, dass der zu debuggende tatsächlich geladen ist. Klicken Sie mit der rechten Maustaste darauf und wählen Sie "Symbol laden Informationen". Es zeigt Ihnen, wo es für die PDB-Datei
  • die "nur mein Code" -Option kann schwer in die Quere kommen, Sie sind sehr wahrscheinlich in erhebliche Teile des Codes laufen, die nicht deins sind. Extras + Optionen, Debugging, Allgemein und deaktiviere diese Option.
+2

(+1) Das 'Module' Fenster zeigte, dass meine Assemblys nicht als Benutzercode behandelt werden, siehe aktualisierte Frage –