10

要点: アプリケーションが起動するのを Xcode で待機させ、Xcode の外部からアプリケーションを起動し、Xcode をブレークポイントで停止させることは可能ですか?

--詳細は後述--

10.8.5 で Xcode 4.6.3 を使用してテキストを stdin にパイプする必要がある単純な C プログラムをデバッグ (行ごとにステップ実行) したいと考えています。

そのためには、次のようにプログラムを起動する必要があります $ cat in.txt | ./mysimpleprogram > out.txt を実行し、Xcode デバッガーをブレークポイントで停止させます。

この回答https://stackoverflow.com/a/13006633/2779792で見つけた指示に従いましたが、Xcode はブレークポイントで停止しません。

問題を再現するには

  1. Xcode 4.6.3 を開く

  2. 「Xcode へようこそ」画面で、「新しい Xcode プロジェクトを作成する」を選択します。

  3. [新しいプロジェクトのテンプレートを選択] 画面で、[Mac OS X] -> [アプリケーション] -> [コマンド ライン ツール] を選択し、[次へ] をクリックします。

  4. 「Choose options for your new project:」画面で、Product Name: HelloWorld、Type: C -> Next、Use Automatic Reference Counting = False

  5. プロジェクトの場所を選択します。

注: Xcode の設定 -> 場所 -> 派生データで、「相対」を選択しました。

  1. 製品メニュー -> スキーム -> スキームの編集に移動します

  2. スキーム編集ウィンドウの左側で、デフォルトで選択されているのは「Run HelloWorld Debug」です。スキーム編集ウィンドウの右側にある [自動的に起動] ラジオ ボタンを [HelloWorld の起動を待つ] に変更しました。Debugger = LLDB、Debug Process As = 私

  3. コードに 1 つ以上のブレークポイントを設定します。

  4. [製品] -> [実行] を選択します (または [再生] ボタンをクリックします)。これで、Xcode のメイン ウィンドウに「HelloWorld の起動を待機しています」と表示されます。

  5. ターミナル ウィンドウを開き、HelloWorld 実行可能ファイルに移動します。私の場合は .../HelloWorld/DerivedData/HelloWorld/Build/Products/Debug/

  6. コマンド ./HelloWord でプログラムを実行します

プログラムが実行され、Hello, World! が出力されます。予想通り、Xcode は「HelloWorld : HelloWorld の実行を終了しました」と表示します。どのブレークポイントでも停止しませんでした。

望ましい動作です。Xcode はブレークポイントで停止し、コードをステップ実行できるようにする必要があります。

助けやヒントをありがとう。

4

1 に答える 1

13

デバッガーがプロセスの実行に気づき、プロセスにアタッチするのにかかる時間内に、プロセスの実行がブレークポイントを通過しました。このセットアップでデバッガーから確定的な動作を取得するには、最初のブレークポイントの前でプロセスの実行を一時停止し、デバッガーがアタッチされるまで待機する必要があります。これを行う簡単な方法は、STOP シグナルを送信するコードを追加することです。

raise(SIGSTOP);

実行はこの時点で停止し、アタッチするとデバッガーは自動的に続行します。

于 2013-09-30T01:19:42.550 に答える