4

実行可能ファイルがあり、gdb を使用してデバッグしています。gdb を使用するのはこれが初めてなので、ご容赦ください。

関数にブレークポイントを設定したいのですが、クラス ダンプを使用して関数の名前を知っています。シンボルテーブルがないと言っているので、その関数にブレークポイントを追加することはできません。シンボル テーブルを追加しようとしましたが、まだシンボル テーブルが読み込まれていないというエラーが表示されます。

では、このメソッドにブレークポイントを設定できる方法はありますか? それは客観的なcメソッドであり、cではありません(それが違いを生む場合)。あとは、このメソッドの引数を調べるだけです。

4

1 に答える 1

8

class-dumpには、-Aオプションがあり、関数のアドレスを出力できます。

@interface FooObject : NSObject
{
}

- (void)y;  // IMP=0x100000d54

@end

これにより、アドレスを使用してブレークポイントを設定できます。

(gdb) b *0x100000d54
Breakpoint 1 at 0x100000d54

実行可能ファイルを削除していない限り、メソッドの名前を使用してブレークポイントを設定できるはずです。

(gdb) b -[FooObject y]
Breakpoint 2 at 0x100000d60

(アドレスは、後者がいくつかのフレーム設定コードをスキップするのと同じではありません。)

于 2011-03-26T07:03:08.713 に答える