Laden...

Visual Studio debugger hält nicht bei bestimmten Breakpoints

Erstellt von Jonas007 vor 2 Jahren Letzter Beitrag vor 2 Jahren 846 Views
J
Jonas007 Themenstarter:in
37 Beiträge seit 2020
vor 2 Jahren
Visual Studio debugger hält nicht bei bestimmten Breakpoints

Hallo liebe Community,
ich habe ein kleineres Konsolen-Projekt mit mehreren .cs Dateien gestartet. Das Problem ist ziemlich merkwürdig: Die Breakpoints für den Debugger funktionieren nur vereinzelt, z.B.: im Program.cs (mit Main-Methode) funktionieren sie wie gehabt. Wenn ich einen Breakpoint in einer anderen Datei setze verhält es sich komisch, da, wenn ich den Breakpoint im Konstruktor setze, alles funktioniert, aber wenn ich einen in einer Methode setze er nicht funktioniert. Er wird nicht übersprungen! Wenn ich in jener Methode einen Breakpoint setze, öffnet sich die Konsole und der Curser blinkt normal, wie wenn es laden würde - der Debugger öffnet sich hierbei nicht, es kommt aber auch keine Fehlermeldung. Wenn ich einen Breakpoint direkt am Anfang setze, funktioniert der Debugger ganz normal. Ich kann dann sogar Einzelschritte gehen, wenn ich aber auf weiter klicke, und er eigentlich zum nächsten Breakpoint springen sollte, und sich jener Breakpoint in besagter Methode (es handelt sich um mehrere verschiedene) befindet, lädt der Debugger auch ewig und es passiert nichts.

Was ich bereits probiert habe: An den Punkten, an denen ich halten will habe ich eine "Console.WriteLine("Test"); " - Zeile eingefügt, um zu sehen, ob das Programm überhaupt richtig läuft. Das funktioniert einwandfrei. Außerdem habe ich schon den Computer neugestartet und im VS - Inststaller "reparieren" geklickt und VS neu installiert.
Ich verstehe nicht, wie so etwas sein kann, dass der Breakpoint an vielen Stellen nicht funktioniert.

Es tut mir leid, falls ich das Problem nicht genau erklären konnte - wie gesagt ist es extrem merkwürdig und es ergibt meiner Meinung nach keinen Sinn aber ich hoffe, dass mir hier jemand weiterhelfen kann 🙂

463 Beiträge seit 2009
vor 2 Jahren

Hast du dein Projekt schon einmal komplett neu erstellt? Ich vermute, dass es Unterschiede zwischen der erzeugten Version und deinem Quelltext gibt. Es gibt dazu auch eine Einstellung, dass der Debugger diese veränderten Dateien akzeptiert: Optionen - Debugger Quelldateien müssen exact mit der Originalversion übereinstimmen. Wenn du diese deaktivierst nimmt er Debugger auf veränderte Dateien.

T
2.219 Beiträge seit 2008
vor 2 Jahren

Normalerweise steht auch beim Breakpoint als Hovertext, dass die Versionen nicht übereinstimmen.
Das ist dann genau für diesen Fall ein Hinweis, dass man nicht den aktuellen Stand debuggt.
Ich hatte das vor vielen Jahren häufiger, weshalb ich mitlerweise meine Projekte immer komplett neubaue.
Dauert bei meinen Projekten nur ein paar Sekunden, ist damit also kein großes Problem.

T-Virs

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

16.807 Beiträge seit 2008
vor 2 Jahren

Ich hab das Problem immer wieder, wenn der Solution Cache veraltet ist.
Ist im Endeffekt ein durchaus bekanntes Problem und die Ursache ist der Solution Cache bzw. veraltete Dateiinformationen im Cache. Theoretische Ursachen dafür, die durchaus auch begründet bzw. bewusst sein können, gibts viele. (=> Google Suche nach "visual studio debugger skips breakpoints")
Das passiert bei mir meistens dann, wenn ich den Git Branch wechsle. Bemerke ich meist erst, wenn Visual Studio gewisse Tests nicht mehr findet, weil der Cache alt ist.
Hier ist es zumindest bei mir relativ gut reproduzierbar.

Dann lösche ich den .vs Ordner (VS muss dazu geschlossen sein) in der Solution.
Danach funktionieren auch meine Breakpoints wieder.

Mit VS 2022 hab ich das Problem aber bislang nicht gehabt.

J
Jonas007 Themenstarter:in
37 Beiträge seit 2020
vor 2 Jahren

Danke erstmal für die schnellen Antworten.

@Stefan.Haegele
Ich habe mein Projekt soeben komplett neu erstellt ohne Erfolg. Ich wüsste nicht, wie es passieren kann bzw. wie ich es anstellen würde eine Unterschiedliche Version zu meinem Quelltext zu erzeugen. Deine vorgeschlagene Option habe ich auch probiert - leider ebenfalls ohne Erfolg. Beim Starten des Debuggers, öffnet sich die Konsole und lädt. Die Diagnosetools öffnen sich ebenfalls jedoch ohne das der Timer bei "Diagnosesitzung" voranschreitet.

@T-Virus
Im Hovertext steht nur wie gehabt Speicherort, Zeile, Zeichen und die Methode in der sich der Breakpoint befindet - eine Meldung, dass die Versionen nicht übereinstimmen, finde ich nicht.

Was mich stutzig macht ist, dass in den Diagnosetools nichts passiert, wie wenn es eben wirklich laden würde. Außerdem ist gerade auch noch etwas komisches passiert: ich bin soeben zu einem Breakpoint gelangt, der solche Probleme verursacht hat. Ich habe den Debugger >3min im Hintergrund laufen lassen und auf einmal springt der Debugger ganz normal dort hin und ich kann von dort aus wie gehabt debuggen 🙂
Ich weiß aber nicht woran das liegt, dass es so lange bis dorthin dauert. Auch bei einem weitern Versuch dauerte es wieder ca. 3 min. Wie kann es sein, dass der Debugger so lange lädt?
Das komische daran ist, dass er in bestimmte Methoden so lange lädt aber an andere Stellen in Bruchteilen einer Sekunde. Weiß jemand, was hier zu tun ist?

16.807 Beiträge seit 2008
vor 2 Jahren

Bist Du auch wirklich im Debug Build und nicht ausversehen im Release?
Code-Optimierung beim Debug Build deaktiviert?

Der Debugger braucht i.d.R. nur dann lang, wenn er sehr viel laden muss (also zB. Symbole).
Hast Du in den Debugging Optionen den Haken bei "Enable Just My Code" evtl nicht gesetzt? Wenn nicht, dann debuggst Du vereinfacht ausgedrückt die gesamte Runtime, was nich Dein Ziel sein dürfte.

J
Jonas007 Themenstarter:in
37 Beiträge seit 2020
vor 2 Jahren

Ich bin auf jeden Fall im Debug build.
Code-Optimierung habe ich noch nie etwas geändert bzw. wüsste ich nicht wo ich das finde - ist aber laut MS - Documentation standatmäßig deaktiviert.
Symbole o. dgl. werden nicht geladen, da es sich wie bereits erwähnt um eine einfache Konsolenanwendung handelt.
Der Haken bei "Nur meinen Code aktivieren" ist auf jeden Fall gesetzt.

Danke schonmal für die Hilfe, auch wenn wir den Fehler noch nicht finden konnten 🙂

16.807 Beiträge seit 2008
vor 2 Jahren

Symbole o. dgl. werden nicht geladen, da es sich wie bereits erwähnt um eine einfache Konsolenanwendung handelt.

Hab von Debug Symbolen gesprochen, die werden immer beim Debugging geladen, egal welcher .NET Typ.
Die Frage ist immer nur wie viele. Festlegen von Symboldateien (PDB-Dateien) und Quelldateien im Debugger - Visual Studio (Windows)

C
151 Beiträge seit 2006
vor 2 Jahren

Auch wenn der Thread schon älter ist. Dies sind meine eigenen Notizen zu diesem Fehler, der mich vor längerer zeit geplagt hat. Ihr könnt gerne selbst testen, ob etwas davon hilft. Ich würde jedoch vorher ein Backup machen.

  • Wenn release Version Haltepunkte fehlerhaft sind beim debuggen: pdb datei im release ordner löschen. Alternative alle obj und deb/release/bin ordner
  • Projekteinstellungen > Build > code optimieren aus
  • Alternativ: Im Projektfenster auf den Pfeil neben „Properties“ klicken > AssemblyInfo.cs öffnen und die Zeile [assembly: Debuggab-le(DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] einfügen
  • Projekteinstellungen > Build > Erweitert > Debuginformationen > nur pdb (standard)