問題タブ [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++ - 初期化されていない変数のそのような使用を報告できるツールは何ですか?
次のプログラムを検討してください
明らかに、未定義の動作があり、一般的にデバッグ ツールを使用してキャッチできるようにしたいと考えています。cppcheck (オンラインデモを使用) と 、およびg++ -fsanitize=address
をg++ -fsanitize=undefined
試しましvalgrind
た。x.d
しかし、これらのツールは、読み取り時に初期化されていないことを報告しません。
この種の未定義の動作 (できれば Linux で実行) をキャッチするには、どのツールを使用できますか?
c++ - プロジェクトのサンプル プロジェクトからメモリ サニタイズの結果を再現できません
fedora rpm スペックファイルを使用してソースからビルドされた centos7、clang-3.6.1 からまったく同じ結果が得られます。Ubuntu 14.04、clang-3.4
https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowToの wiki の手順 を可能な限り忠実に使用します。このページの最終更新は 6 か月前です。
googlest リビジョン 613 はまだ tr1 を使用しています
googletest を tip (746) に更新すると、次の警告が表示されてコンパイルされます
そして、そのページからの些細な提案されたケースは、msan によって取り上げられませんでした
非常に大きなmmapを使用しているため、valgrind barfsが発生するプロジェクトがあるため、メモリのサニタイズが非常に役立ちます。私が何か間違ったことをしている場合。どうやら googletest がエラーを抑制しているようです。Google テストを削除し、テスト ケースを
if(foo[4] == 'z') std::cout << "z です" << std::endl;
期待どおりに明らかなエラーの報告をトリガーします
単体テスト ライブラリでメモリ サニタイズを使用することは可能ですか?
redis - jemalloc を使用した asan の下の Redis
Redis 3.0.6 を 4 つの異なる方法でコンパイルしています。
- ジェマロック
- libc malloc
- アサン + ジェマロック (
-fsanitize=address -fno-omit-frame-pointer
) - asan + libc malloc
次にredis-bench
、これらすべてのバイナリで標準を実行します。私が理解していないのは、シナリオ3
のパフォーマンスがシナリオに非常に近いということ1
です。
誰かが私にこれがどのように可能であるかを説明できますか? jemallocまたは関連するものをサポートしていないというマニュアルはありませんでした。
clang - 未定義の動作サニタイザー抑制ファイル: 抑制の解析に失敗しました
-fsanitize=undefinedを使用して clang 3.6 でアプリケーションをコンパイルした後、いくつかのエラーを無視するために抑制ファイルを使用しながら、インストルメント化されたプログラムを起動しようとしています。
抑制ファイル ubsan.supp には以下が含まれます。
これにより、次のエラー メッセージが表示されます。
gcc 4.9 ビルドでも同じことが起こります。私が見つけることができる唯一のドキュメントはhttp://clang.llvm.org/docs/UndefinedBehaviorSanitizer.htmlです。これは clang 3.9 用ですが、3.6 を使用しています (ubsan のドキュメントは含まれていません)。
誰もがclang 3.6で動作するubsan抑制ファイルの実例を提供できますか?
編集: ubsan のソース コードを参照すると、有効な抑制タイプは "vptr_check" だけであることがわかりました。ただし、どのバージョンを見ていたかはわかりません。誰もがclang 3.9でより多くの抑制タイプが利用可能であることを確認できますか?
c++ - std::vector> push_back は heap-buffer-overflow を与える
入力を読み取る次のコードを使用して、hackerrank の偶数ツリー タスクstd::cin
を解決しようとしています (カスタム文字列データに置き換えて、入力とプログラム コードを 1 か所にまとめます)。
2 番目の数値はエッジの数 (後続の数値のペア) になるため、必要なベクトル内の要素の数を予測できます。
このコードにより、次のサニタイザー エラー (コメント行と同じエラー) が表示されます。
ここで何が欠けていますか?
編集
わかりましたのでemplace_back
、デフォルトstd::vector<int>
でオンになるソリューションの1つを見つけましたv
:
しかし、 cppreferenceを使用したコンストラクター以降、以前は機能しなかったのはなぜですかsize_type
3) デフォルトで挿入された T のインスタンスを count 個含むコンテナを構築します。コピーは作成されません。
gcc - 次の Address Sanitizer 出力を使用して、プログラムでこのセグメンテーション違反を解決するにはどうすればよいですか?
この質問は私の前の質問の続編であり、現在のステータスは、@Employed Russian によって提案されたアドレスサニタイザーの出力を取得したことです。これは以下に示されています。アドレスサニタイザーを使用するのはこれが初めてなので、素朴で申し訳ありません。
@Employed Russian が先に指摘したように、おそらく問題はスタックにあると思われます。では、このスタックの問題を解決するにはどうすればよいでしょうか。これらは私の頭の上にあるからです。
clang - サニタイザーの警告に対処する
数日間、Xcode 7.3 内で Address Sanitizer を起動すると、次の問題が発生します。Sanitizer が問題を検出したときに Xcode コンソールに出力されたエラー メッセージ (実際にはファイルによって抑制されていた):
==13392==警告: fd 55 でシンボライザーに書き込めません
==13392==警告: fd 55 でシンボライザーに書き込めません
==13392==警告: fd 55 でシンボライザーに書き込めません
==13392==警告: fd 55 でシンボライザーに書き込めません
==13392==警告: 外部シンボライザーの使用と再起動に失敗しました!
リポジトリでエラー メッセージを見つけましたが、何が起こっているのか説明できません。明らかに内部書き込み機能は失敗しますが、何が原因なのかわかりません。何か案は?
c++ - clang ですべてのサニタイザーを有効にできないのはなぜですか?
Clangには、実行時に問題を検出するためにオンにできるさまざまなサニタイザーがあります。
ただし、併用できない消毒剤もあります。何故ですか?
大したことではありませんが、単体テストを実行すると、必要以上に時間がかかります。これは、同じテスト用に複数のバイナリを作成し、それぞれを個別に実行しているためです。