5

非常に大規模なプロジェクトでヒープ オーバーフローをデバッグする必要があります。valgrind で少し遊んだ後、C でヒープ ブロック オーバーランを検出するのに最適なツールのように思えたので、これを使って iOS アプリを実行したいと思います。

OS X Yosemite のトランクから valgrind をビルドしてインストールし、意図的なヒープ オーバーフローを含むテスト プログラムを作成し、valgrind がそれらをキャッチして報告することを確認しました。

今、シミュレーターでテストアプリを実行したいと思います。execl() を使用して iOS シミュレーターで実行できると読みましたが、実行すると、コンソールに次のエラーが表示されます。

dyld: LC_DYLD_INFO ロード コマンドがありません

その後、アプリは dyldbootstrap::rebaseDyld() で EXC_BAD_ACCESS でクラッシュします。ここで他に何か必要ですか?Valgrind は明らかに arm64 もサポートするようになりました。valgrind 実行可能ファイルをアプリと一緒にパッケージ化して、デバイスで実行することはできますか?

#define VALGRIND "/usr/local/bin/valgrind"

int main(int argc, char * argv[]) {

    if ( argc >= 2 && strcmp(argv[1], "-valgrind") == 0 ) {
        if ( execl(VALGRIND, VALGRIND, argv[0], NULL) < 0 ) {
            NSLog(@"Failed to relaunch under valgrind");
            exit(1);
        }
        NSLog(@"Running under valgrind!!");
    }

    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
4

1 に答える 1