回避方法“(null)” DPH_BLOCK_INFORMATIONのStackTrace?

StackOverflow https://stackoverflow.com/questions/1442078

  •  22-07-2019
  •  | 
  •  

質問

ヒープの破損を追跡しています。標準のページヒープ検証を有効にしました

gflags /p /enable myprogram.exe

そしてこれは破損の確認に成功します:

===========================================================
VERIFIER STOP 00000008: pid 0x1040: corrupted suffix pattern 

    10C61000 : Heap handle
    19BE0CF8 : Heap block
    00000010 : Block size
    00000000 : 
===========================================================

全ページヒープ検証( gflags / p / enable myprogram.exe / full )を有効にすると、破損が発生したときにエラーが発生することが予想されるため、それ以上。

Windowsの高度なデバッグ:メモリ破損を読みながら、希望を持ち始めました。パートII—ヒープ高度なWindowsデバッグ。 WinDbgをインストールし、user32.dll 、 kernel32.dll ntdll.dll のデバッグシンボルをダウンロードしました。 //support.microsoft.com/kb/311503 "rel =" nofollow noreferrer "> http://support.microsoft.com/kb/311503 。デバッガでプログラムが停止したら、次のコマンドを発行してヒープページに関する情報を表示できます。

0:000> dt _DPH_BLOCK_INFORMATION 19BE0CF8-0x20
ntdll!_DPH_BLOCK_INFORMATION
   +0x000 StartStamp       : 0xabcdaaaa
   +0x004 Heap             : 0x90c61000 
   +0x008 RequestedSize    : 0x10
   +0x00c ActualSize       : 0x38
   +0x010 FreeQueue        : _LIST_ENTRY [ 0x0 - 0x0 ]
   +0x010 TraceIndex       : 0
   +0x018 StackTrace       : (null) 
   +0x01c EndStamp         : 0xdcbaaaaa

(null)スタックトレースにがっかりしました。さて、 http://msdn.microsoft.com/ en-us / library / ms220938%28VS.80%29.aspx のコメント:

  

StackTraceフィールドには、さまざまな理由で常にnull以外の値が含まれるわけではありません。まず、スタックトレース検出はx86プラットフォームでのみサポートされ、2番目はx86マシンでもスタックトレース検出アルゴリズムが完全に信頼できるわけではありません。ブロックが割り当てられたブロックである場合、スタックトレースは割り当て時のものです。ブロックが解放された場合、スタックトレースはその瞬間になります。

しかし、割り当ての瞬間からスタックトレースが表示される可能性を高めることについて、何か考えている人はいるかもしれません。

読んでくれてありがとう!

役に立ちましたか?

解決

あはは!さらに多くの gflags オプションを有効にする必要がありました。

gflags /i myprogram.exe +ust

次の効果があります:

ust - Create user mode stack trace database

パラメータの説明を見ると簡単に思えます。愚かな私。しかし、トレースデータベースのサイズを有効にする前に設定する必要もあるようです:

gflags /i myprogram.exe /tracedb 512

...または何でも(MB単位)。

他のヒント

Microsoftによると、Cランタイム(CRT)モジュールのmalloc関数は、一部のWindowsバージョンでフレームポインター省略(FPO)を使用します。 malloc関数の完全なスタック情報が表示されない場合があります。 (http://support.microsoft.com/kb/268343)

可能であれば、デバッグバージョンCRTのリンクを試みます。この問題を解決するには、/ MDdオプションを使用してリンクします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top