16

私には2つのプロジェクトがあります。1つはnetworkLibログイン用と他のネットワーク機能用で、もう1つはusingLibDemoです。だから私は両方のプロジェクトのすべてのソースコードを持っています。

networkLibプロジェクトは、によって使用される、と呼ばれるフレームワークを出力しmyNetKit.frameworkますusingLibDemo

ここに画像の説明を入力してください

これでログインに成功しましmyNetKit.frameworkたが、スタック情報がないmain()でクラッシュすることがありますが、Xcodeから次のようなスタック情報が表示されることがあります。

ここに画像の説明を入力してください

だから私はそれがどこでクラッシュするか知っています:

ここに画像の説明を入力してください

しかし、Xcodeがスタック情報とクラッシュラインを取得し、最終的にソースファイルを開く方法は公開されていませんUtils.m。ディスクにソースコードがあるからですか?

もしそうなら、それがクラッシュしていないときに、どのようにmyNetKit.frameworkステップバイステップでデバッグできますか?

ヒントをありがとう。

4

6 に答える 6

23

誰かが将来同じ質問をする場合(現在私はXcode 8を使用しています):

あなたはできる:

  1. フレームワークプロジェクトをビルドします(この例では「networkLib」)
  2. プロジェクト出力( "myNetKit.framework")を宛先プロジェクト( "usingLibDemo")にコピーします
  3. デバイスで宛先プロジェクト( "usingLibDemo")を実行します
  4. プロセスを停止します
  5. デバイスから手動でアプリを起動します( "usingLibDemo")
  6. フレームワークプロジェクトを開き、アプリのプロセスにアタッチします(ステップ5で起動)。Xcode 8の場合:[デバッグ]->[プロセスにアタッチ]->アプリの名前を選択します。

フレームワークプロジェクトにいくつかのブレークポイントを設定することを忘れないでください。

于 2017-02-07T13:59:12.460 に答える
7

ライブラリがすべてのシンボルで構築されている場合、ライブラリには、それ自体に埋め込まれている各ソースファイルへのフルパスが含まれています。.aを16進ビューアで開くと、実際にこれを確認できます。これが適切に行われると、XCodeはソースファイルにアクセスする方法を認識します。

ブレークポイントの設定はやや困難です。基本的に、XCodeがライブラリからソースファイルをゆっくりと検出できるようにするために、それらのファイルのメソッドにステップインする必要があります。XCodeがファイルを開いたら、ファイル内の任意の場所にブレークポイントを設定できます。

少し面倒ですが、機能します。必要がなければ、ライブラリプロジェクトをサブプロジェクトにする必要はありません。

于 2013-08-23T10:28:29.973 に答える
6

以下は、フレームワークプロジェクトが個別にあり、いくつかのプロジェクトBにa.frameworkを追加したシナリオを考慮して機能します。

  1. プロジェクトBに移動し、任意の場所にブレークポイントを追加します。
  2. ブレークポイントビュー(すべてのブレークポイントをリストとして表示できます)に移動し、ブレークポイントを右クリックして、[ブレークポイントをユーザーに移動]をクリックします。
  3. a.frameworkに移動し、フレームワークプロジェクトに対して、手順1と2を繰り返します。
  4. 次に、プロジェクトBに戻り、シミュレーター/デバイスでプロジェクトを実行します。

これで、フレームワークで設定されたブレークポイントでもプログラムが停止するのがわかります。

于 2018-04-10T18:58:29.400 に答える
5

ライブラリ()プロジェクト全体networkLibをプロジェクトに追加し、プロジェクト設定に依存関係を追加することでライブラリを動的にリンクすることもできます。したがって、プロジェクト内にすべてのソースコードを含めることができます。したがって、実行時にデバッグできます。

于 2013-03-27T09:12:58.047 に答える
5

複数のフレームワークプロジェクトを扱う場合は、XCodeWorkspaceを使用してください。ワークスペースを使用すると、ブレークポイントが機能し、デバッグを何度も実行しなくてもクラッシュを見つけることができます。長期的には、フレームワークの管理がはるかに簡単になります。

于 2013-03-27T09:13:35.017 に答える
-1

フレームワークを個別に出力するプロジェクトnetworkLibをデバッグする必要があります。フレームワークにはアプリのような構造がないため、他のプロジェクト内のフレームワークファイルをデバッグできません。

于 2013-03-27T08:59:22.467 に答える