Frage

Gibt es eine Möglichkeit Visual Studio (2008 bis 2010 nur ein Upgrade) einzurichten zu brechen, als ob eine Behauptung scheiterte, wann immer jeder Gleitkommazahl wird NaN, QNAN, INF, etc?

Bisher habe ich nur gewesen mit der assert (x == x) Trick, aber ich würde eher implizit etwas, so dass ich überall Behauptungen hinzufügen muß dont.

überrascht Ganz kann ich keine Antwort auf diese über Google finden. Einige Sachen über ‚Floating-Point-Ausnahmen‘, aber ich bin nicht sicher, ob sie die gleiche Sache sind, und ich habe versucht, sie in Visual Studio ermöglicht, aber das Programm nicht bricht, bis etwas katastrophal, weil der NaN geschieht später in der Ausführung.

War es hilfreich?

Lösung

1) Gehen Sie zu Projektoption und aktivieren Sie / fp. Strengen (C / C ++ -> Code Generation -> Schwimm Pint Modell)

2) mit _controlfp , um das Gleitkommazahl Steuerwort zu setzen (siehe Code unten).

#include <float.h>
unsigned int fp_control_state = _controlfp(_EM_INEXACT, _MCW_EM);

#include <math.h>

int main () {

    sqrtf(-1.0);    // floating point exception

    double x = 0.0;
    double y = 1.0/x;   // floating point exception

    return 0;
}

Andere Tipps

Mindestens auf x86, wenn Sie eine NaN erzeugen usw., einer der FPU Statusregisterbits gesetzt. Es gibt einen Weg Sie einstellen können, so dass sie eine H / W Ausnahme auf die nächste nachfolgende wirft FP Betrieb stattfindet, aber das ist nicht ganz so schnell wie Sie erhofft. Ich kann mich nicht erinnern an die Referenz though.

Ich bin nicht sicher, ob dies möglich ist, wie Sie es wollen, aber Sie könnten einen Makro erstellen, die den Code in der markierten Zeile umgebrochen in eine Assertion oder die setzt einen Breakpoint für diese.

Hope, das hilft

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