10

数日間、Xcode 7.3 内で Address Sanitizer を起動すると、次の問題が発生します。Sanitizer が問題を検出したときに Xcode コンソールに出力されたエラー メッセージ (実際にはファイルによって抑制されていた):

==13392==警告: fd 55 でシンボライザーに書き込めません

==13392==警告: fd 55 でシンボライザーに書き込めません

==13392==警告: fd 55 でシンボライザーに書き込めません

==13392==警告: fd 55 でシンボライザーに書き込めません

==13392==警告: 外部シンボライザーの使用と再起動に失敗しました!

リポジトリでエラー メッセージを見つけましたが、何が起こっているのか説明できません。明らかに内部書き込み機能は失敗しますが、何が原因なのかわかりません。何か案は?

https://github.com/Microsoft/compiler-rt/blob/master/lib/sanitizer_common/sanitizer_symbolizer_process_libcdep.cc#L100

4

1 に答える 1

4

パスに ASAN がありません。以下は、エラーを明らかにできるかどうかを確認するために Xcode の外部で実行されました。パスが未定義の場合は簡単でした。私の推測では、XCode は探している場所を見つけられないか、次の場合のように ASAN パスが未定義です。

これを試してみると、パスに追加して削除するとエラーは消えますが、行番号も消えます。つまり、実際のエラーメッセージを再度表示したい場合は、使用する必要があります

unset ASAN_SYMBOLIZER_PATH

いいえ

ASAN_SYMBOLIZER_PATH=

次のように ac プログラムを作成します...

int main(void){
    int a[3];
    a[3] = 4;
    return 0;
}

コンパイルします。今のところ警告を無視してください...

gcc -std=c11 -Wall -g3 -fno-omit-frame-pointer -fsanitize=address broken_asan_test.c
./a.out

このようなものが表示されるはずです...

=================================================================
==29192==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fff5ad1052c at pc 0x000104eefe78 bp 0x7fff5ad104f0 sp 0x7fff5ad104e8
WRITE of size 4 at 0x7fff5ad1052c thread T0
    #0 0x104eefe77 in atos[29193]: [fatal] 'pid_for_task' failed: (os/kern) failure (5) (+0x100000e77)
==29192==WARNING: Can't write to symbolizer at fd 3
    #1 0x7fff940495ac in atos[29206]: [fatal] 'pid_for_task' failed: (os/kern) failure (5) (+0x35ac)
    #2 0x0  (<unknown module>)

この行に注意してください

==29192==WARNING: Can't write to symbolizer at fd 3

シンボライザーをパスに追加するように変更します...

export ASAN_SYMBOLIZER_PATH=/usr/local/Cellar/llvm/3.6.2/bin/llvm-symbolizer

そしてエラーは消えます...

=================================================================
==29312==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fff55ac450c at pc 0x00010a13be78 bp 0x7fff55ac44d0 sp 0x7fff55ac44c8
WRITE of size 4 at 0x7fff55ac450c thread T0
    #0 0x10a13be77 in main (/git/ghub/doc/c/./a.out+0x100000e77)
    #1 0x7fff940495ac in start (/usr/lib/system/libdyld.dylib+0x35ac)
    #2 0x0  (<unknown module>)
于 2016-04-21T00:37:20.173 に答える