Frage

Wenn ich in VS2005 bedingten Haltepunkt verwenden, anstatt temporären Code mit spezifischen Bedingungen zu überprüfen, bemerkte ich, es verringerte mehr Zeit und die Ausführungsgeschwindigkeit nimmt !! Wissen Sie, warum? und wie dieses Problem zu lösen?

Exmaple:

    int sequence = atoi(m_SequenceNumber.GetAscii());
    if( sequence == 392914)//temporary code to check to step into code
    {
        int x = 0;//I put breakpoint here
    }

Der vorherige Code ausgeführt wird schneller, als wenn ich verwenden bedingten Haltepunkt mit (Sequenz == 392914)

War es hilfreich?

Lösung

Es ist besser (wenn möglich) einen Speicher Beobachtungspunkt als ein bedingter Haltepunkt zu verwenden. Ein bedingter Haltepunkt (wie andere haben darauf hingewiesen) zusätzlichen Code jedes Mal, wenn die Ausführung Zeiger gehen über diesen Punkt laufen, um zu bestimmen, ob es oder nicht brechen würde - natürlich nimmt diese zusätzliche Zeit. Ein Speicherbeobachtungspunkt eines bestimmten Typs bekommt Register bestimmte spezielle Hardware zu verwenden, -. Gibt es eine Grenze, wie viele Beobachtungspunkte Sie, dass einstellen kann beschleunigt, aber wenn man ihnen gibt es fast keine Geschwindigkeitseinbuße können

Ein Speicher Beobachtungspunkt gesetzt, um die Breakpoint-Fenster. Sie legen Sie es nicht auf einer Zeile Code, sondern auf eine Adresse im Speicher. Dies deutet auf die offensichtliche Einschränkung, es funktioniert nur für Dinge, die Sie die Adresse tatsächlich nehmen, wie globale Variablen und dynamisch Speicher zugewiesen Bereiche (mit new usw.). Sie sind begrenzt, wie viel Speicher Sie sehen dürfen (basierend auf der CPU, ich glaube, Sie wahrscheinlich mehr oder weniger zugewiesenen Sonderregister erhalten).

Ich bin eigentlich nicht vor VS sitzt gerade jetzt, aber grob gesagt, klicken Sie rechts im Fenster Haltepunkte und wählen Sie so etwas wie „neuer Datenhaltepunkt“. Anschließend geben Sie die Adresse des Speichers und die Größe in Byte. Immer dann, wenn der Wert Ihr Beobachtungspunkt ändert anspringt. Dies ist besonders nützlich für den Speicher Korruption Fragen herauszufinden.

Andere Tipps

Ich habe auch in dieses Problem in der Vergangenheit laufe und fand nie wirklich eine Art und Weise unter Verwendung von Conditional Haltepunkten innerhalb einer großen Schleife fortzusetzen, ohne die Leistung zu beeinträchtigen. Ich habe erfahren, dass Sie einige temporäre Code wie folgt einfügen könnte, die nicht die Leistung beeinträchtigen würde und würde dazu führen, VS (gleiches Verhalten wie ein bedingter Haltepunkt) zu brechen.

if ( condition ) Debugger.Break();

überlegen Sie, wie Sie einen bedingten Haltepunkt implementieren würden, wenn Sie einen Debugger schreiben. Das einzige Mal, wenn der Debugger die Möglichkeit hat, den Zustand zu beurteilen ist, wenn der Haltepunkt erreicht wird. Also auch wenn der Haltepunkt abhängig ist, so weit wie Sie betroffen sind, so weit wie der Prozessor den Haltepunkt betrifft, ist getroffen wird jedes Mal der Befehl ausgeführt wird. Der Debugger erhält die Kontrolle und führt Folgendes aus:

  • feststellt, dass der Haltepunkt ist an die Bedingung
  • wertet der Ausdruck
  • , wenn der Ausdruck falsch ist, der Debugger setzt die Ausführung
  • sonst der Debugger schaltet die Kontrolle über Sie

Also selbst wenn Sie nie den Haltepunkt Treffer sehen (weil die Bedingung nicht erfüllt), kann der Debugger den Haltepunkt sein auffängt und Auswertung der Bedingung tausende Male pro Sekunde (oder mehr vielleicht).

Ich nehme an, es ist, weil es Zeit braucht, um den Zustand auszuführen. Es ist noch viel schneller als von Hand, die notwendige Anzahl von Zeiten hart zu treten.

hinzugefügt temporärer Code kann (zumindest ein wenig) optimiert wird durch den Compiler. Bedingte Haltepunkt springt wahrscheinlich bis zu einem gewissen Visual Studio-Code, der benötigten Informationen manuell abzurufen, zu wissen, ob es tatsächlich pausieren oder nicht.

Das wäre irgendwie erklären, warum es mehr Zeit in Anspruch nimmt. Aber ich bin nur raten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top