Visual Studio C ++ 2008/2010 - Pause auf float NaN
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.
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
Versuchen Sie ermöglicht fp Ausnahmen
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