Einen kuriosen Fall von Visual Studio 2010 debugger(es kann nicht auf einen break-point)

Einem kuriosen Fall von Visual Studio 2010 debugger(es kann nicht auf einen break-Punkt)

Dies ist der code, der das problem reproduziert:

class Program {
  static void Main(string[] args) {
    bool b = false;

    if (b) {
        List<string> list = new List<string>();
        foreach (var item in list) {

        }
    } else {
        Console.WriteLine("1");
    }
    Console.WriteLine("2");//add a break point here in VS2010
  }
  //1. configuration: release
  //2. platform target: x64 or Any Cpu
  //3. debug info: pdb only or full
  //4. OS: Win7 x64
  //5. optimize code: enabled
}

Fügen Sie eine Pause, um die Letzte Anweisung aus code, dann debug es in vs2010, werden Sie sehen, dass der break-point kann nicht erreicht werden.

Reproduzieren diese merkwürdige Fall, müssen Sie die folgenden Bedingungen erfüllen:

  1. Betriebs-system: windows 7 x64;
  2. VS build-Konfiguration: release;
  3. VS build platform target: x64 oder Any Cpu;
  4. VS build-debug-info: pdb nur oder voll;
  5. VS build optimieren-code: aktiviert;

Ich bin nicht sicher, dass diese Bedingungen sind ausreichend, um es zu reproduzieren, aber es ist, wie meine Maschine so konfiguriert wurde, dass, wenn ich gefunden dieses Problem.

Warum ist der debugger nicht in der Lage, um den Haltepunkt erreicht?

Vielen Dank im Voraus!

Und wenn Sie sich reproduzieren können dieses Problem, bitte beachten Sie die Abstimmung über in diesem post.

  • Ich habe diese Konfiguration und kann ich nicht reproduzieren Ihre angegebenen Verhalten. Würde es eine Rolle, dass ich mit Win7 64 Bit SP 1? Der rest der Einrichtung ist die gleiche, aber ich den Haltepunkt zu jeder Zeit.
  • funktioniert Prima für mich - so oder so, warum sind Sie das debugging in den release-Modus?
  • Ich Stelle mir die Strecke wurde optimiert durch den compiler, wenn Sie Schritt, ist es dann läuft die Konsole.writeline("1") doppelt, aber die Bereitstellung von verschiedenen Argumenten?
  • Vermute, dass unter Freigabe können Sie nicht treffen, jeder Haltepunkt als debug-info ist nicht generiert.
  • Nein, das habe ich versucht. Es trifft der Pause, solange es nicht die Letzte Anweisung.
  • Nein, ich bin mit Win7 SP1 auch. Eigentlich bin ich nicht sicher, welche anderen Konfigurationen kann das Ergebnis beeinflussen.
  • Ohne Grund, nur um das Spiel 🙂
  • Nein, ich dekompiliert und sah den IL-code. Das ist wahrscheinlich nicht der Fall.
  • Du hast Recht, es ist seltsam... wenn du den Haltepunkt auf der aktuelle Aufruf von WriteLine (in der disassembly-Ansicht), dann ist es nicht der hit, aber Sie haben zu halten, neuaktivieren es für jeden Lauf.
  • Was ich denke, ist sogar odder, ist, wenn Sie duplizieren die Finale Konsole.WriteLine (kopieren Sie es auf der Linie unten), können Sie den Haltepunkt in der letzten, und es wird ein hit sein, aber die, die mit Ihrem derzeitigen Haltepunkt es immer noch nicht...
  • Ja, ich habe bemerkt, dass auch. Es überspringt das erste Anweisung nach der if-else.
  • Dies sieht wie ein job für connect.microsoft.com.
  • Hamidi: vielen Dank für die Beratung. Ich poste diese Frage gibt.

Schreibe einen Kommentar