問題タブ [ubsan]
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++ - Clang ランタイム チェック: バックトレースを出力
Clang コンパイラは、たとえば-fsanitize=unsigned-integer-overflow
. チェックの 1 つが失敗したときにバックトレース (gdb などを使用) を出力できますか? 現在、問題の正確な場所を取得していますが、コンテキストがありません。これらの実行時チェック、特にバックトレースからより多くの情報を取得するにはどうすればよいですか?
c++ - Clang の UBSan & Function Pointer: これは違法ですか?
共有オブジェクトから C シンボルとしてエクスポートされる関数ポインター テーブルを介して、いくつかの C++ 関数を呼び出そうとしています。コードは実際に動作していますが、Clang の未定義の動作サニタイザー (= UBSan) は、私が行った呼び出しが次のように違法であると認識しています。
Clang の未定義の動作サニタイザーにより、関数ポインターを介して C++ 標準クラス オブジェクトの参照を返す関数を間接的に呼び出すことは合法ですが、ユーザー定義クラスに対しては違法です。誰か教えてくれませんか?
Clang-llvm 3.4-1ubuntu3およびCMake 2.8.12.2を使用して、 Ubuntu 14.04でプロジェクトをビルドしようとしています。現象を再現するには、以下の5 つのファイルを同じディレクトリに配置し、build.sh を呼び出してください。makefile を作成してプロジェクトをビルドし、実行可能ファイルを実行します。
フー。
Foo.cpp
HelloWorld.cpp
CMakeLists.txt
build.sh
私は問題を掘り下げる手がかりを見つけようとしており、サニタイザーの「関数」オプション (-fsanitize=function) によって問題がキャッチされていることに気付きましたが、あまり文書化されていません。このような別の惑星から来たように見える実行時エラー メッセージについて、合理的な説明をいただければ幸いです。ありがとう。
出力で Clang が「不明」と指摘したのは何ですか?
以下は、サニタイザーの何が「不明」であったかを確認するための addr2line からの出力です。
うーん、私が呼び出すことを期待していた関数のように見えます。Clang の場合、どのように異なって見えるか推測できますか?
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++ - GCC未定義動作サニタイザーの使用
今日、 GCC Undefined Behavior Sanitizer (ubsan)に関する記事を読みました。ただし、そこの手順に従う (コードに追加する) と、コンパイラ (Ubuntu 15.04 の GCC 4.9.2) は、いくつかの参照が定義されていないと言います。-fsanitize=undefined
どうすればこれを修正できますか?
g++ - Cygwin の UBsan にはどのパッケージが必要ですか?
さまざまな構成を処理するテスト スクリプトがあります。このスクリプトは、Undefined Behavior Sanitizer (UBsan)が利用可能かどうかをテストし、利用可能な場合はビルドを実行します。テストは次のとおりです。
上記のテストHAVE_UBSAN=1
は Cygwin で設定されています。これは、GCC の Cygwin が UBsan をサポートしていると主張していることを意味します (そうでなければ、エラーが発生します)。ただし、Cygwin i686 と x86_64 の両方でリンク エラーが発生します。
明らかに、必要なものはすべてgcc-core
またはでインストールされませんでしたgcc-g++
。セットアッププログラムを再度実行して検索しましubsan
たが、ヒットしませんでした。
Cygwin の UBsan にはどのパッケージが必要ですか?
私がそれに取り組んでいる間、私が経験すると予想される次の失敗について尋ねることもできます. Cygwin の Asan にはどのパッケージが必要ですか?
前もって感謝します。
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でより多くの抑制タイプが利用可能であることを確認できますか?