私はソースを持っている外部ライブラリを使用しているiPhoneアプリで作業しています。デバッグ中、オブジェクトのいくつかはデバッガで0x0として表示されますが、アプリケーションはうまく動作します。また、いくつかのオブジェクトアドレスが間違ったものを指しています。 これらのシンボルは外部ライブラリにあります。実際に外部ライブラリにあるファイルをトレースしている場合、アドレスは問題ありません。Xcodeデバッガのバグ?
誰でもこの動作を停止する方法はありますか?
私はソースを持っている外部ライブラリを使用しているiPhoneアプリで作業しています。デバッグ中、オブジェクトのいくつかはデバッガで0x0として表示されますが、アプリケーションはうまく動作します。また、いくつかのオブジェクトアドレスが間違ったものを指しています。 これらのシンボルは外部ライブラリにあります。実際に外部ライブラリにあるファイルをトレースしている場合、アドレスは問題ありません。Xcodeデバッガのバグ?
誰でもこの動作を停止する方法はありますか?
UPDATE:ターゲット設定>タブを構築> GCC 4.2のコード生成>
を「親指用にコンパイル」私は、この目標設定をオフにし、GDBの問題が去っていきました。
-
こんにちはジョン。
私はあなたが何を言及しているのか理解しています。私はまた、gdbとNSLog()が私のコードの特定の部分のポインタに対して異なる結果を与えているという問題も見ています。ゆでダウンの例では
、GDBが、私はこの関数内の任意の行にブレークポイントを設定すると、「ポインタ」のために適切な値を報告して失敗します。
id testPointer(id pointer)
{
NSLog(@"pointer value: %p", pointer);
@try
{
NSLog(@"foo");
}
@catch (NSException *e)
{ }
@finally
{ }
return pointer;
}
私はMacOS 10.7 SDKの下で構築している間にXcode 4.2.1で同じ問題を抱えています。私はちょうど成功のために親指をオフにコンパイルすることができます!とにかくiOS用にコンパイルするときは、これを日常的にやっています。 – ctpenrose
zPeskは、0x0はnilであり、初期化されていないオブジェクト(特にインスタンス変数)の共通の値です。私は、あなたが「間違ったことを指し示す」という意味を明確にしていません。ローカル(スタック)変数を初期化していない場合は、初期化するまでランダムなアドレスを指すことがあります。あなたは何の問題を抱えていますか?
私はデバッガで見ているポインタが私が知っている他のものを指しているという意味で間違ったことを指していますが、それらのポインタは決して指し示すべきではありません。 私はプログラムでしばらくの間働いており、これが起こったのは初めてです。私はデバッガの遅延シンボルのロードをチェックしてみました。 –
ここでgdbのバグを発見したことはほとんどありません。おそらく、コードの詳細やgdbが返すものは、ここでは大いに役立ちます。あなたはコンパイラの最適化を有効にしていませんか?これは常に驚くべきデバッガの結果につながります。 –
また、gdbがあなたに何を伝えているのか疑問があるならば、NSLog()文を追加して結果を比較するべきです。 –
はあなたがこの問題を解決できましたか?私も、ThumbとARMモードを混在させるときgdbで異常な動作に気付いています。たとえば、gdbによって報告された変数のアドレスは、printf( "%p \ n")ステートメントを使って報告されたアドレスから正確に64バイト離れているようです。おそらくgdbは現在の動作モードがARMかThumbかどうかを明示的に指示する必要があります...?
私は0x0のメモリアドレスを持つオブジェクトはnilだと思います。これはエラーではありません。 – zpesk
私はそれがゼロであることを知っています。私はそれらのオブジェクトを読んでいたので、プログラムはすぐにクラッシュするはずです。それは私を驚かせるものです。 0x0が何であるかわからないからではありません。私はそれが何であるかを知っているので、それは素晴らしいです。 –
ObjCのderefernce nilは合法です。それはクラッシュすべきではありません。それは静かに何もしません。 –