2013-10-04 9 views
26

私は非常に大きなグラフィックMacアプリケーションを持っていますが、10.9 GMでコンソールに以下のメッセージがたくさん届きました。Mac OS X 10.9でNaNがCoreGraphics APIに渡されている場所を検出する方法

<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. 

私は[NSApp nextEventMatchingMask:untilDate INMODE:デキュー]呼び出した後、これらのメッセージは、デバッガに表示されていることに気づいたが、私は理由がいくつか他の場所であると思います。しかし、私はCocoa Graphicsを使用する場所が多すぎます。私は10.9の前にこの種のメッセージを受け取っていませんでした。

NaNがCoreGraphics APIに渡す場所を検出する方法はありますか?

Screenshot for this error on console

+0

スタックトレースをもう少し拡張する必要があります。イベントディスパッチ機構は、グラフィックススタックではなく、実行ループのトップレベルの機能です。 – CodaFi

+0

これらのメッセージは、nextEventMatchingMask:のステップオーバー直後にコンソールに表示されます。エラーイベントがどこかに蓄積されて表示されるようです。どのようにグラフィックススタックを展開するには? – Igor

+0

スタックトレースペインの下部にスライダーがあります。右にずらしてスライドさせ、トレースの上部に表示されている機能を確認します。 – CodaFi

答えて

63

多くの掘り出し物の後で、Xcodeの "CGPostError"にシンボリックブレークポイントを設定できることがわかったので、スタックトレースが得られます。

+0

素晴らしい!できます! – Igor

+0

ありがとう、いい男!それは私に数時間のトラブルを救った... – Echelon

+0

恐ろしい!ありがとう – Chris

0

ので、あなたはとても例外ブレークポイントが動作するはずです、その時点で例外を取得する必要があります...

ここでは...

のために外を見る事は、あなたがめちゃめちゃている可能性がありますメソッドのシグネチャまで...つまり

-(float)myHeight 
{ 
    return 56.0; 
} 

は、サブクラスでめちゃくちゃます

導入
-(int)myHeight 
{ 
    return 42; 
} 

か、はNaNを放出するいくつかの悪い数学(複数可)を持っている...

はNaNを検出するために、いくつかの方法があります... C99 isnan()
ものIEEE浮動小数点のトリック(f != f)はNaNに該当します

+0

これは実際に例外ですか? AFAIK、それはObjective-CでもC++でもない。私はQuartzのエラーメッセージで明示的に言及されていることを覚えていますが(以前はこの特定のエラーはありませんでした)、CGErrorにブレークポイントを設定することができました。 (AppCodeのユーザー:2.1のシンボリックなブレークポイントはサポートされていません.Xcodeを使用する必要があります。) –

+0

ええ、この時点で例外であるかどうかは分かりませんが、私は長い間、iOS開発を行っていません... appcodeの@PeterHoseyは、未処理のgdb/lldbプロンプトにアクセスできますか?そうであれば、シンボリックなブレークポイントを設定することができます... xcodeでf!= fの条件を設定することもできます(想像はしますが、テストしていません) –

+0

AppCodeにはデバッガのコンソールペインがありますが、それが動作しない時(プロンプトは表示されません)。私はあなたが「f!= f'の条件」を意味するのか分かりません。 –

1

この問題が見つかりました。 NSAffineTransformにつながるある点でゼロで割っています。いくつかの理由で、コンパイラとOSは10.9より前にこの状況に合格しました。

7

私が愚かに将来の使用のためにNSPopoverを保持していたときに、このエラーが発生しました。

popover.showRelativeToRect(_:)はあなたがする必要があると思われ、それを忘れることができます。

+0

こんにちはクリス、目的のCでこの問題を解決する方法を教えてください。 – NSLog

+0

私の場合、静的なvarにNSPopoverリファレンスを格納して、 。 NSPopoverは一度表示されると再利用されたくないように見えます。理想的ではないが、需要に応じてポップオーバーを再現することは、かなりの警告を出した。 CGPostErrorを破ると、NSPopover -showRelativeToRectにエラーが生成されたことが示されます。preferredEdge: –

関連する問題