6

この男は、クラスの依存関係グラフを生成するための非常に優れたツールを思いつきましたが、それはソース コードの解析と#importディレクティブの検索に依存しています。

これはきちんとしていますが、これには多くの問題があります。特に、インポートのインポートやプレフィックスヘッダー、インポートによって参照されるファイル内のクラスが実際に使用されているかどうかは考慮されていません。

class-dumpMach-O ファイルに保存されている Objective-C のメタデータを調べて、クラスの依存関係のメモリ内表現を生成したいと考えています。

私はむしろこれを最初からやりたくないので、私は疑問に思っています:

  • すでに行われていますか?
  • この情報を抽出するために必要な基本的なツールを提供するオープンソース ライブラリはありますか (Mach-O ファイルを調べ、そこに含まれる Objective-C 情報のファサードを作成するライブラリ-繰り返し処理できるようにします)すべてのクラス、それらのメソッド、プロパティ、ivar などをスキャンし、他のクラスへの参照をスキャンします) class-dump のソースから始めるのが良いと思います。
  • この種の経験がある場合、私が達成しようとしていることは実行可能ですか?
  • どのような障害を克服する必要がありますか?
4

3 に答える 3

1

すでに行われていますか?

はい - しかし、良い公開実装はお勧めできません

この情報を抽出するために必要な基本的なツールを提供するオープンソース ライブラリはありますか (Mach-O ファイルを調べ、そこに含まれる Objective-C 情報のファサードを作成するライブラリ-繰り返し処理できるようにします)すべてのクラス、それらのメソッド、プロパティ、ivar などをスキャンし、他のクラスへの参照をスキャンします) class-dump のソースから始めるのが良いと思います。

objc/...ほとんどのユース ケースでは、バイナリを調べるよりもobjc ランタイム機能を使用する方が効果的です。

この種の経験がある場合、私が達成しようとしていることは実行可能ですか?

はい。私はobjcランタイムを使用して同様のことをしました。

どのような障害を克服する必要がありますか?

それはあなたが望む詳細のレベルに大きく依存します...そのような実装が見つからない場合は実装時間ですが、objcランタイムでより難解な関数をグーグルで検索すると、いくつかのオプションが見つかると思います。おそらく、(オープンな) 言語バインディングまたはブリッジで見つかるでしょうか?

自分で作成する場合は、を使用して登録された objc クラスを取得しobjc_getClassList、そこから必要なプロパティ/情報にアクセスできます。

于 2011-08-28T06:15:00.683 に答える