Heob
Heob を使用してメモリリークを検出します。
Heob の設定を指定するには、Analyze >Heob に移動します。

「Extra arguments 」で、Heob を実行するための追加の引数を入力します。Heob コンソールで使用可能な引数を一覧表示するには、このフィールドに「-H 」と入力し、「Enter」を選択します。
たとえば、「-oleaks.html 」オプションを使用して、リークデータを HTML ファイルに記録します。このオプションと併せて、「-g2 」オプションを使用すると、ファイル内でリークを視覚的にグループ化でき、「-L1024 」オプションを使用すると、最大 1024 バイトのリーク内容をファイルに記録できます。たとえば、-oleaks.html -g2 -L1024
変更内容をデフォルト設定として保存するには、[
] を選択します。
カスタマイズした設定プロファイルを削除するには、そのプロファイルを選択し、[Delete] を選択します。
以下のセクションでは、利用可能なオプションについてさらに詳しく説明します。
記録結果
チェックの結果は、「Memcheck 」ビューに表示され、ファイルに記録されます。ファイル名は「XML output file 」で指定します。Heob はプロジェクトディレクトリ内にファイルを作成します。
ファイル名には、プロセス識別子 (PID) を変数として使用できます。たとえば、leaks-%p.xml などです。これにより、子プロセスにも Heob が注入されます。
使用可能なその他の変数として、親プロセスのPIDを表す%P や、アプリケーション名を表す%n などがあります。
変数を使用する場合、Qt Creator はファイルを自動的に開くことはできませんが、プロジェクトディレクトリからファイルを開くことは可能です。
例外の処理
Handle exceptions Qt Creator で、 を選択すると、標準の例外ハンドラが使用され、アプリケーションがクラッシュした際にデバッガが自動的にアタッチされます。これは、[ ] > [ ] > [ ] >Off Preferences Debugger General Use Qt Creator for post-mortem debuggingを選択して、xml-ph-0002@deepl.internalをポストモーテムデバッガーとして登録した場合にのみ機能します。
「On 」を選択すると、クラッシュの原因と発生場所を確認し、バッファオーバーランが原因かどうかを検知する Heob 例外ハンドラが使用されます。
Only を選択すると、例外ハンドラのインストール以外のすべての Heob 機能が無効になります。アプリケーションがクラッシュした場合、クラッシュのスタックトレースのみが表示されます。したがって、このオプションは、コンソール上で Heob を使用する場合や、子プロセスでも Heob を実行する場合に特に有用です。
エラー時の例外発生
「Raise breakpoint exception on error 」チェックボックスを選択すると、アプリケーションの実行中にエラーが表示されます。
このオプションが無効になっている場合、二重解放、無効なポインタの解放、メモリ不足などのエラーについては、収集されたデータがすべて結果ファイルに書き込まれるだけで、アプリケーションの実行終了時にのみそれらを確認できます。
このオプションを有効にすると、アプリケーションはエラーの発生箇所で停止します。これは、Heob をデバッガの下で実行する「Run with debugger 」オプションと併用する場合に特に有用です。
ページの保護
「Page protection 」で、「Off 」を選択すると、標準のメモリ割り当て関数が使用され、メモリリークの検出のみが有効になります。
「After 」を選択すると、各割り当てブロックの末尾に保護ページが配置され、そこにアクセスされると例外がスローされます。「Before 」を選択すると、各割り当てブロックの前に保護ページが配置されます。これらのオプションはメモリを消費し、チェック処理を遅くするため、64ビットプログラムまたは実行時間が短いプログラムでのみ推奨されます。
「Freed memory protection 」を選択すると、解放時にすべての割り当てページが保護され、そのアドレス空間が二度と使用されないようになります。これは、use-after-freeやdouble-freeの検出に役立ちます。ただし、32ビットプログラムの場合、利用可能なメモリアドレス空間がすぐに不足してしまう可能性があります。
リークデータの処理
「Leak details 」で、プロセスの終了時に収集されたリークデータの処理方法を指定します。「None 」を選択すると、リークデータは収集されません。リークタイプの検出を有効にしている場合、プロセスの終了時に Heob がデータを収集するのに、より多くの時間を要する場合があります。
「Simple 」を選択すると、解放されなかったすべてのメモリが結果ファイルに書き込まれます。
「Detect Leak Types 」を選択すると、すべての静的およびグローバルメモリブロックを解析し、リークへの参照を検出します。到達可能なブロックには「reachable」のマークが付けられ、他の参照について再帰的にチェックされます。参照が見つかった場合、そのブロックには「indirectly reachable」のマークが付けられます。残りのブロックについては、相互の参照がチェックされ、「indirectly lost」または「jointly lost」(ブロック同士が相互に参照している場合)のマークが付けられます。 参照が全くないブロックは「lost」とマークされます。「Detect Leak Types (Show Reachable) 」を選択すると、到達可能なブロックも結果ファイルに記録されます。
「Fuzzy Detect Leak Types 」を選択すると、いずれかのアドレスへの参照があるメモリブロックを「reachable」または「indirectly lost」としてマークします。このオプションは、割り当てブロック内のどこかにアドレスを保持しているだけで、割り当てられたブロックの先頭を直接参照しない一部のカスタムアロケータ(ffmpeg の「av_malloc() 」など)と併用する場合に役立ちます。「Detect Leak Types (Show Reachable) 」を選択すると、到達可能なブロックも結果ファイルに記録されます。
「Minimum leak size 」で、検出するリークのサイズ(バイト単位)を選択します。
「Control leak recording 」で、「Off 」を選択すると、すべてのリークが記録されます。リーク記録の実行中は、記録設定を変更することはできません。
リーク記録を開始せずに Heob を起動するには、On (Start Disabled) を選択します。Heob コンソールで、on またはoff を選択して記録を開始するか、clear ですべての結果を記録するか、show を選択して現在のすべてのリークを結果ファイルに記録します。プロセスが終了する前にファイルを開いて内容を確認してください。
Heobの起動時にリーク記録を開始し、記録を制御するオプションも維持するには、On (Start Enabled) を選択してください。
「Heob によるメモリリークの検出」、「手順:分析」、「アナライザー」、「コードの分析」も参照してください 。
Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.