3

OSXLionでXcodeを使用してCコマンドラインアプリケーションをデバッグしようとしています。アプリケーションには、標準入力を介した大量の入力データが必要です。シェルでは、テキストファイルをこのアプリケーションにパイプするだけです。

Xcodeでこれを行うにはどうすればよいですか?

4

3 に答える 3

4

デバッグのために、データをXcodeプロジェクトの実行可能ファイルにパイプすることができます。

ここで同様のStackoverflowの質問に対する私の答えを参照してください。

(便宜上コピー):

Xcode 4.5.1では:

  1. スキームエディタを開きます([製品]メニュー-> [スキームの編集...])
  2. デバッグの実行スキームを選択します
  3. [情報]タブパネルで、[起動]ラジオボタンの選択を[自動的に]から[MyApp.appが起動するのを待つ]に変更します。
  4. スキームエディタを閉じる
  5. [実行]ボタンを押して、ターゲットをビルドして実行します。(ツールバーのXcodeのステータスウィンドウには、「MyAppの起動を待機しています」と表示されます)
  6. ターミナルを起動し、ビルドしたアプリケーションのフォルダにCDを挿入します。(/ Users / user / Library / Developer / Xcode / DerivedData / MyApp-のようになりますdmzfrqdevydjuqbexdivolfeujsj/Build/Products/Debug/
  7. 標準入力に必要なものをすべて入力してアプリを起動します。

    echo mydata | ./MyApp.app/Contents/MacOs/MyApp

  8. Xcodeに戻ると、デバッガーがアプリケーションの起動を検出して接続します。

于 2012-12-01T10:32:30.283 に答える
4

@Nestorの答えをより明確にするためだけに...

xコードにパイプする方法がわからなかったので、スクリプトの先頭に、テストファイルと呼ばれるテストファイルからパイプする次のコードを追加しました。

    // For debugging
if (argc == 2 && strcmp(argv[1], "debug") == 0 ) {
    printf("== [RUNNING IN DEBUG MODE]==\n\n");
    char test_file_path[] = "/Users/bonobos/are/amazing/test.txt";
    freopen(test_file_path, "r", stdin);
}

xcodeがコンパイルされると、奇妙なランダムフォルダーに移動するため、完全なファイルパスが必要であることに注意してください。したがって、テキストリソースをわざわざパッケージ化したくない場合は、絶対パスを使用することをお勧めします。

freopenはファイルの内容をstdinに送信します。

また、ifステートメントがあるため、debugの引数を持つようにxcodeを設定しました。これは、コメントを付けてそれを行い、現実のためにコンパイルするときにコメントを外すことを忘れるよりも優れています。

xcode引数を設定するには、次の場所に移動します。

製品>スキーム>編集スキーム スキームの編集

次に、実行スキームで引数'debug'を設定します。

引数のデバッグを追加

于 2015-10-03T15:48:35.257 に答える
1

残念ながらできません。次のように、デバッグ目的でファイルから読み取るようにプログラムを変更する必要があります。

    NSFileHandle *input;

    if (AmIBeingDebugged())
        input = [NSFileHandle fileHandleForReadingAtPath:@"/Users/me/debug.input"];
    else
        input = [NSFileHandle fileHandleWithStandardInput];

AmIBeingDebuggedのソースはここにあります。

于 2012-10-01T13:27:18.070 に答える