問題タブ [sanitizer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - デバッグ情報フラグのみの Gcc スレッド サニタイザー誤検知
Gcc のスレッド サニタイザーに問題があり、bugzilla または stackoverflow で見つけることができないため、何かが足りないのか、それとも本当にバグなのかわかりません。以下を含む main.cpp ファイルを作成した場合:
今、次を使用してコンパイルすると:
結果の実行可能ファイルを実行しても、問題は発生しません。それでも、デバッグ情報フラグを追加すると:
次に、スレッド サニタイザーがデータ競合を検出します。
これで、clang++ (バージョン 3.6.0 (トランク 221144)) でコンパイルされたまったく同じコードがデータ競合を検出しなくなりました。
私は gcc からのこの動作について少し疑問があります: 1) スレッドへの引数として空のラムダ関数を渡すことは、私には理にかなっているように思えます 2) gcc の動作は -g フラグに依存していますが、やるべきことがたくさんあるとは思えませんスレッドサニタイザーを使用 3) 同様の状況下で、clang は私が正しいと考える動作を採用します
どうもありがとう、
c++ - Clangが示すように、このコードは本当に未定義ですか?
-fsanitize=undefined
単体テスト ライブラリである Catch を使用するプロジェクトに切り替えました。Catch からの 1 行は、このフラグによって未定義の動作を引き起こしていることが通知されました。私は孤立した例を作ることができました:
以下でコンパイル:
これを実行すると、次の出力が表示されます。
これは、私と clang3.6.0
の友人に起こり3.4-1ubuntu3
ます。gccバージョンでは起こりません4.9.2
それで、ここに何がありますか?このコードは本当に悪いのでしょうか? それとも、clang の最後で怪しいことが起こっているのでしょうか?
c++ - OpenCV でアドレス サニタイザーを使用する
Google のAddress Sanitizerを CUDA プロジェクト、より正確には OpenCV cuda 関数で使用しようとしています。ただし、最初の cuda 呼び出しで「メモリ不足」エラーが発生しました。
で再現できます
でコンパイル
gcc でも同じ結果が得られました。また、結果なしでcuda関数をブラックリストに登録しようとしました。
opencvなしでcudaを使用するようになりました:
サニタイザーはメモリ リークで停止します。
私の質問は、アドレスサニタイザーを使用して、これにこだわらずにソフトウェアをサニタイズするにはどうすればよいですか? 少なくともcuda関連のすべての呼び出しを適切にブラックリストに登録するにはどうすればよいですか?
有名な Web 検索エンジンで関連するものは見つかりませんでした。人々が cuda や asan、あるいはその両方を使用していないようです。cuda を完全に無効にしたビルドを持っているだけですか?
asan は cuda メモリ管理に苦労していると思いますが、少なくともコードベースの残りの部分でこのツールを使用する方法を探しています。
c - gdb で UBSan レポートを中断して続行するにはどうすればよいですか?
-fsanitize=undefined
GCC および Clang の最近のバージョンは、ランタイム インストルメンテーション コードを追加するコンパイル フラグ ( ) である Undefined Behavior Sanitizer (UBSan) を備えています。エラーが発生すると、次のような警告が表示されます。
packet-ber.c:1917:23: ランタイム エラー: 54645397829836991 の 8 桁の左シフトは、タイプ 'long int' で表すことができません
これをデバッグして、上記の行でデバッグ ブレークを取得したいと思います。Address Sanitizer (ASAN) にはASAN_OPTIONS=abort_on_error=1
、キャッチ可能な致命的なエラーが発生するものがあります。使用可能と思われる唯一の UBSan オプションはUBSAN_OPTIONS=print_stacktrace=1
、レポートのコール トレース ダンプを生成するオプションです。ただし、これではローカル変数を調べてからプログラムを続行することはできません。そのためご利用-fsanitize-undefined-trap-on-error
いただけません。
UBSan レポートで gdb を中断するにはどうすればよいですか? 機能しているbreak __sanitizer::SharedPrintfCode
ように見えますが、名前はかなり内部的に見えます。
c - コンパイル時に Leak Sanitizer が有効になっているかどうかを知るにはどうすればよいですか?
GCC コンパイラと Clang コンパイラはどちらも、C プログラムのメモリ リークを検出するのに役立つLeakSanitizerをサポートしています。メモリ リークが避けられない場合があります (たとえば、テスト スイートでテストされているため)。
このようなメモリには、Leak Sanitizer インターフェイスを使用して注釈を付けることができます。
ただし、これは LSan をサポートしないコンパイラでは機能しません。Address Sanitizer では、この構成を使用して ASAN の可用性を検出できます。
__has_feature(leak_sanitizer)
Clang の LSan の存在だけを検出することはできず、GCC にも存在しません__SANITIZE_LEAKS__
。とにかく、ASAN の可用性を検出するにはどうすればよいですか? LSan は、AddressSanitizer および ThreadSanitizer とは別に有効にできることに注意してください。
c++ - Linux(ubuntu 12.04 64ビット)でブール値を解析するcinのg ++ 4.9サニタイザーバグ
これは私にはg ++のバグ(おそらくサニタイザーに関連する)のように見えますが、clang(gccサニタイザーがclang afaikからのものであることを考えると)または別のg ++バージョンを使用している人は別の結果になるのでしょうか?
これは、ユーザーの stdin から 3 つの値を読み取り、それらを解析して出力する単純なプログラムです (必要に応じて、cin のフラグの状態も表示します)。
サニタイザーなしでコンパイルし、ユーザー指定の値「true false 1」で実行した場合のシェルの表示は次のとおりです。
「true、true、true」が出力されなかったのは少し驚くべきことです(「0」のみがfalseに解析され、それ以外はtrueに解析されると思いました)が、それは重要ではありません。ここにジューシーなビットがあります: サニタイザーフラグを追加しますが、同じ入力を提供すると、異なる結果が表示されます:
最終的な詳細 (詳細が必要な場合は lmk)
build - アドレス サニタイザー (asan) を使用した mplayer ビルド
アドレスサニタイザーフラグを指定してclangを使用してmplayerを構築しようとしています。ただし、make を実行するとエラーが発生し続けます。これは、私が使用したコマンドを含む完全な出力ログです。どんな助けでも大歓迎です。
c++ - メモリーサニタイザー
Ubuntu 14.04でClang 3.7.0を使用してMemory Sanitizerをいじっています。次のコードは完全に機能します。
でコンパイルすると
私はエラーを期待していました。ans が初期化されていないという事実を Memory Sanitizer はキャッチしませんか?
ご協力いただきありがとうございます。