ここに文書化されているように、LLDB には double 型の構造体フィールドを出力する際にさまざまな問題が あります。
私の場合、タイプ CLLocationCoordinate2D の構造体を印刷しようとしました。Xcode 4.5.2 の時点で、CLLocationCoordinate2D を印刷する際のエラーが持続します。
このバグを回避する方法を探していると、このブログで素敵なマクロ LOG_EXPR に出会いました: http://vgable.com/blog/2010/08/19/the-most-useful-objective-c-code-ive-ever -書かれた/
型をデバッガーに記録するという優れた仕事をしますが、デバッガーから呼び出すことはできません。
LLDB コマンド ライン インターフェイスでのデバッグ中に LOG_EXPR のようなことを行う方法や、GDB に戻す以外に、コマンド ラインから任意の構造体で動作するその他の改善された印刷を行う方法を見つけた人はいますか?
LLDB を入力すると、次のようになります。
(lldb) p (CLLocationCoordinate2D)[self mapSetPointLatLon]
(CLLocationCoordinate2D) $4 = {
(CLLocationDegrees) latitude = 42.4604
(CLLocationDegrees) longitude = 42.4604
(double) easting = 42.4604
(double) northing = -71.5179
}
lldb によって追加された冗長で間違った行に注意してください。
LOG_EXPR をコードにコンパイルすると、(同じブレークポイントで) 何が起こるかを次に示します。
Line of Code (not debugger):
LOG_EXPR(self.mapSetPointLatLon);
produces the correct output in the debugger output:
2013-01-26 14:02:17.555 S6E11[79116:c07] self.mapSetPointLatLon = {latitude=42.4604,longitude=-71.5179}
コマンド ラインから LOG_EXPR を呼び出そうとすると、同じブレークポイントで次のようになります。
(lldb) expr LOG_EXPR(self.mapSetPointLatLon);
error: use of undeclared identifier 'LOG_EXPR'
error: 1 errors parsing expression
(lldb)
別の例を次に示します。デバッガーに正しいことをさせることができる場合があることがわかったからです。
これは、構造体 2 の方法を割り当てる私のコード フラグメントです。
CLLocationCoordinate2D defloc = CLLocationCoordinate2DMake(kStartingLat, kStartingLon);
[[self.verticalPagingViewController mapPagingViewController] setMapSetPointLatLon: defloc];
変数を出力するだけで機能します。
(lldb) p defloc
(CLLocationCoordinate2D) $1 = {
(CLLocationDegrees) latitude = 42.4604
(CLLocationDegrees) longitude = -71.5179
}
アクセサー メソッドの戻り値の型をキャストすると、失敗します。
(lldb) p (CLLocationCoordinate2D)[[self.verticalPagingViewController mapPagingViewController] mapSetPointLatLon]
(CLLocationCoordinate2D) $2 = {
(CLLocationDegrees) latitude = 0
(CLLocationDegrees) longitude = 0
(double) easting = 0
(double) northing = 0
}