Wie zu erkennen, wo NaN ist, vorbei an CoreGraphics-API auf Mac OS X 10.9
Ich habe sehr große Grafik Mac-app, und jetzt ich bekomme eine Menge der folgenden Meldungen in der Konsole unter 10.9 GM.
<Error>: Error: this application, or a library it uses, has passed an invalid numeric value (NaN, or not-a-number) to CoreGraphics API. This is a serious error and contributes to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.
Bemerkte ich, dass diese Meldungen erscheinen im debugger nach dem Aufruf von [NSApp nextEventMatchingMask: untilDate inMode: dequeue] aber ich denke, die Gründe sind in einigen anderen Orten. Aber ich habe zu viele Orte, wo ich einen Kakao-Grafiken. Ich didn ' T erhalten diese Art von Nachricht vor dem 10.9.
Wie zu erkennen, wo NaN ist, vorbei an CoreGraphics-API?
- Sie brauchen, um erweitern Sie Ihre stack-traces ein wenig mehr. Der event-dispatch-Mechanismus ist ein top-level-Funktion der run-Schleife, nicht die Grafik-stack.
- Diese Meldungen erscheinen in der Konsole, unmittelbar nach Schritt über nextEventMatchingMask:. Es scheint, Fehler Ereignisse angesammelt irgendwo und dann gemeinsam dargestellt werden. Wie Sie Grafik-stack?
- Es gibt einen Schieberegler am unteren Rand der stack-trace-Bereich. Schieben Sie es so weit nach rechts wie es geht, dann sehen die Funktion erscheint an der Spitze der Spur.
- Nichts erscheint an der Spitze des Stapels, außer meiner aktuellen Funktion. Andere threads haben auch nicht etwas, das relativ zum Kern Grafik. Nur Fehlermeldungen erscheinen in der Konsole-Fenster.
- Ich bekomme diese Fehlermeldung in der Konsole-Fenster für die code-Ausführung auf Xcode 7.1.1 und OS X 10.11.1. Was ist der fix?
- In meinem Fall, die Einstellung eine andere Ansicht-controller zu einer vorhandenen NSPopover Instanz, die diesen Fehler verursacht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach viel Graben um, die ich gefunden habe, können Sie eine symbolische Haltepunkt auf "CGPostError" in Xcode an, und geben Sie einen stack-trace.
Ich wurde immer diese Fehlermeldung, wenn ich war dumm Beibehaltung einer NSPopover für die zukünftige Verwendung.
Scheint es
popover.showRelativeToRect(_:)
ist alles, was Sie tun müssen, und dann können Sie es vergessen.Habe das problem gefunden. Es ist die Division durch null zu einem gewissen Punkt, führt zu NSAffineTransform mit NaN-Elemente in der matrix. Für einige Gründe, compiler und OS übergeben diese situation vor 10.9.
deshalb sollten Sie sich eine Ausnahme an diesem Punkt, so wird eine exception breakpoint sollte funktionieren...
hier sind Dinge zu suchen...
können Sie versaut haben eine Methode Signatur... ie
Durcheinander gebracht, in einer Unterklasse
oder Sie haben einige schlechte Mathe - (s), die Strahlen ein NaN...
gibt es ein paar Möglichkeiten zu erkennen, die ein NaN...
c99 eingeführt
isnan()
auch die ieee-float-trick
(f != f)
gilt auch für NaNCGError
, obwohl ich daran erinnern, dass explizit in Quarz-Fehlermeldungen (aber ich hatte nie diese spezifischen Fehler vor). (Benutzer von AppCode: Es unterstützt keine symbolischen Haltepunkte wie der 2.1—Sie müssen Xcode für diese.)f!=f
".