OSXLionでXcodeを使用してCコマンドラインアプリケーションをデバッグしようとしています。アプリケーションには、標準入力を介した大量の入力データが必要です。シェルでは、テキストファイルをこのアプリケーションにパイプするだけです。
Xcodeでこれを行うにはどうすればよいですか?
OSXLionでXcodeを使用してCコマンドラインアプリケーションをデバッグしようとしています。アプリケーションには、標準入力を介した大量の入力データが必要です。シェルでは、テキストファイルをこのアプリケーションにパイプするだけです。
Xcodeでこれを行うにはどうすればよいですか?
デバッグのために、データをXcodeプロジェクトの実行可能ファイルにパイプすることができます。
ここで同様のStackoverflowの質問に対する私の答えを参照してください。
(便宜上コピー):
Xcode 4.5.1では:
dmzfrqdevydjuqbexdivolfeujsj/Build/Products/Debug/
)標準入力に必要なものをすべて入力してアプリを起動します。
echo mydata | ./MyApp.app/Contents/MacOs/MyApp
Xcodeに戻ると、デバッガーがアプリケーションの起動を検出して接続します。
@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'を設定します。
残念ながらできません。次のように、デバッグ目的でファイルから読み取るようにプログラムを変更する必要があります。
NSFileHandle *input;
if (AmIBeingDebugged())
input = [NSFileHandle fileHandleForReadingAtPath:@"/Users/me/debug.input"];
else
input = [NSFileHandle fileHandleWithStandardInput];
AmIBeingDebuggedのソースはここにあります。