メモリデバッガー

メモリデバッガは、メモリリークバッファオーバーフローといったソフトウェアメモリの問題を検出するためのデバッガです。これらは、動的メモリの割り当てと解放に関連するバグが原因で発生しますマネージドコードなど、ガベージコレクション機能を持つ言語で書かれたプログラムでも、コレクション内の「生きた」参照によるメモリリークなどを検出するためにメモリデバッガが必要になる場合があります。

概要

メモリデバッガーは、メモリアクセス、メモリの割り当て、および解放を監視することで動作します。多くのメモリデバッガーでは、アプリケーションを特別な動的メモリ割り当てライブラリで再コンパイルする必要があります。これらのライブラリのAPIは、従来の動的メモリ割り当てライブラリとほぼ互換性があります。そうでない場合は、動的リンクを使用します。Electric Fenceは、 mallocによるメモリ割り当てをデバッグするデバッガーです。一部のメモリデバッガー(例:Valgrind)は、実行ファイルを仮想マシンのような環境で実行し、メモリアクセス、割り当て、および解放を監視することで動作します。そのため、特別なメモリ割り当てライブラリでの再コンパイルは不要です。

メモリリークなどのメモリの問題は、特定の条件下でしか現れない場合があり、発見に非常に時間がかかります。メモリの不正使用を検出するツールを使用すると、プロセスははるかに迅速かつ容易になります。[1]

異常に高いメモリ使用率はソフトウェアの老化の一因となる可能性があるため、メモリ デバッガーを使用すると、プログラマーはコンピューター システムのメモリを使い果たすソフトウェアの異常を回避でき、実行時間が長くてもソフトウェアの高い信頼性を確保できます

静的アナライザーとの比較

一部の静的解析ツールはメモリエラーの検出にも役立ちます。メモリデバッガーはアプリケーションの実行中にアプリケーションの一部として動作しますが、静的コード解析はコードを実行せずに解析することで行われます。これらの異なる手法は通常、異なる問題例を検出するため、両方を併用することで最良の結果が得られます。[2]

メモリデバッグツールのリスト

メモリデバッグに役立つツールのリストです。プロファイラはメモリデバッガと組み合わせて使用​​できます。

名前OSライセンス言語技術
アドレスサニタイザーLinux、Mac OSフリー/オープンソース(LLVM)C、C++、Rustコンパイル時のインストルメンテーション(ClangGCCで利用可能)と専用ライブラリ
アリネアDDTLinux、ブルージーン独自の商業C、C++、F90。スーパーコンピュータ上の並列プログラムにも使用可能ランタイム - 動的リンクを通じて
AQタイムWindows (Visual Studio、Embarcadero IDE)独自の商業.NET、C++、Java、Silverlight、JScript、VBScript [3]ランタイム
Bチェックソラリス
境界チェッカーWindows (Visual Studio)独自の商業C++実行時インターセプトまたはコンパイル時
大根Unix、Windows、Mac OS X [4]フリー/オープンソース[5]Java、C/C++、Perl、Eiffel [4]実行時の動的不変検出
デバッグ_new(一般的なテクニック)(一般的なテクニック)C++コンパイル時のオーバーライド
デリーカーWindows (スタンドアロン、および Visual Studio、RAD Studio、Qt Creator、CLion 用のプラグイン)独自の商業C++、.Net、Delphiランタイムインターセプト
dmallocどれでも無料/オープンソース(ISCライセンスCコンパイル時のオーバーライド
DynamoRIO § ドクターメモリーAndroid、Linux、Windowsフリー/オープンソース(LGPLおよびBSD)どれでもランタイムインターセプト
電気柵UnixGNU GPLC、C++コンパイル時のオーバーライド
ファストMM4ウィンドウズGNU GPLデルファイコンパイル時のオーバーライド
IBM ラショナル ピュリファイUnix、Windows独自の商業C++、Java、.NETランタイム
保険++Windows (Visual Studio プラグイン)、Unix独自の商業C、C++ソースコードインストルメンテーション
インテル インスペクターWindows (Visual Studio)、Linux独自の商業C、C++、Fortranランタイム
libcwdLinux (gcc)無料/オープンソースC、C++コンパイル時のオーバーライド
リブメムソラリスSolarisにバンドルリンク時のオーバーライド
メムウォッチ任意(プログラミングライブラリ)無料/オープンソースCコンパイル時のオーバーライド
mtrace様々なGNU LGPLGNU Cライブラリ内蔵出力アクセス
MTuner様々な無料C、C++実行時インターセプト、リンク時オーバーライド(MSVC、Clang、GCC)、リーク検出
Oracle Solaris Studio(旧称Sun Studio 実行時チェック)Linux、SolarisプロプライエタリフリーウェアC、C++、Fortran
オリバー(APTインターナショナル)MVS、MVS/EXA、DOS/VSE独自のソフトウェアIBM アセンブラランタイムインターセプト、ハイパーバイザー - タイプ 2
トータルビューUnix、Mac OS X独自の商業C、C++、Fortranランタイム
Valgrind § メモリチェックLinux、FreeBSD、Solaris/illumos、Mac OS、AndroidGNU GPLどれでもランタイムインターセプト
ウィンドブグウィンドウズプロプライエタリフリーウェアC、C++、.NET、Pythonランタイム

参照

参考文献

  • Michael C. Daconta: C++ ポインタと動的メモリ管理、John Wiley & Sons、ISBN 0-471-04998-0
  • アンドリュー・ケーニッヒ著『C 罠と落とし穴』アディソン・ウェスレー、ISBN 0-201-17928-8
  1. ^ 「レビュー:Linuxコーディングのための5つのメモリデバッガー」。2015年11月20日。 2017年8月24日閲覧
  2. ^ 「動的解析と静的解析」 。 2017年8月24日閲覧
  3. ^ “Managed Code - AQtime Pro | SmartBear”. 2013年9月19日時点のオリジナルよりアーカイブ2013年1月14日閲覧。
  4. ^ ab 「Daikon 不変量検出器ユーザーマニュアル」。
  5. ^ 「Daikon 不変量検出器ユーザーマニュアル」。
  • イワン・スカイッテ・ヨルゲンセン著「記憶のバグを狩る」
  • Jean-Philippe Martin著「空きメモリチェッカーの比較」[全文引用必要]
Retrieved from "https://en.wikipedia.org/w/index.php?title=Memory_debugger&oldid=1298103365"