0

私は UMDH を使用するのが初めてで、UMDH が出力しているいくつかのエラーを処理する方法を理解するのに苦労しています。私は典型的な使用法に従います(MSサイトから):

gflags -i OCES.exe +ust

別の端末ウィンドウで:

OCES.exe

そして、元のターミナル ウィンドウに戻ります。

umdh -p:5712 -f:out1.txt

しかし、UMDH から次の警告が表示されます

Warning:
Warning: UMDH didn't find any allocations that have stacks collected.
Warning: Use gflags to enable allocation stack collection.
Warning: Restart the application for the setting to be in effect.
Warning: A 32bit GFLAGS must be used. The command is:
Warning: gflags -i OCES.exe +ust
Warning:

UMDH の 2 回目の呼び出しを行うと、同じエラーが発生し、UMDH を使用して 2 つのスナップショットを比較すると、有用な出力が得られません (スタックやバックトレースはありません)。別のコンピューターで UMDH を使用しましたが、同じ問題は発生しませんでした (別のコンピューターは使用できなくなりました)。

UMDH のインストールは、「Windows 用デバッグ ツール」コレクションの 32 ビット バージョンからのもので、WinXP Professional の 32 ビット バージョンを実行しており、私のソフトウェアは Visual Studio 2008 を使用する C++ です。

これらの警告を検索しましたが、有用なものは見つかりませんでした。どんな助けでも大歓迎です。

4

3 に答える 3

1

gflags アプリケーションを実行し、[イメージ ファイル] タブに移動します。プロセス名を入力し、Tab キーを押します。ここで、"Stack backtrace (Megs)" の値をたとえば 64 または 128 に増やします。デフォルトでは、この値は私の知る限り 32Megs であり、複数のスタック割り当ての場合、これは簡単にオーバーランする可能性があります。

于 2011-03-14T13:16:32.880 に答える
0

@Steve-トピックをOCES.exe(ネットワークエンジン)からメインアプリに少し移動しましたが、同じ警告が表示されます(メインメインアプリの詳細については、上記のフォローを参照してください。その同じコードベースOCES.exe、他のコードを追加するだけです)。out1.txt次のような出力があります。

22 bytes + 1E at 151EA0 by BackTrace0
28 bytes + 18 at 151EE0 by BackTrace0
2D8 bytes + 18 at 151F20 by BackTrace0
314 bytes + 1C at 152210 by BackTrace0
314 bytes + 1C at 152540 by BackTrace0

これは、以前のコンピューターで受け取った出力の一部とは少し異なります。

C0 bytes + 18 at 154B88 by BackTraceB
    7C96EED2
    7C94B394
    7C918F21
    7C91F661
    7C91F225
    7C91EF58
    7C91ED13
    7C915BAA
    7C91D129

そのため、 からのスタック トレース情報が欠落していると想定していますout1.txt。gflags が実行可能ファイルにどのように影響するかについて、範囲が限定されているのだろうか?

于 2010-10-20T18:24:34.963 に答える
0

これを行ったかどうかは説明から明らかではありませんが、+ustフラグを設定した後にプロセスを再起動する必要があります。

スナップショットの実行に関する警告を取り除くまで、比較は失敗し続けます。

編集:

この記事は、シンボルが ntdll.dll に対して適切に設定されていない場合、ツールが機能しないことを示しています。これを確認していただけますか?

UMDH の使用時に発生する可能性のある問題

UMDH を使用するときに発生する最も一般的なエラーは、スタック トレースが有効になっていないために発生します。また、Ntdll.dll のシンボルが間違っていると、UMDH が実行できなくなります。他のシンボル ファイルの場合、UMDH は実行されますが、ログ ファイルにはスタック トレースが含まれており、関数名はなく、モジュール内の相対アドレスが含まれています。遠い 3 番目のエラーは、間違った PID を指定しています。

于 2010-10-20T17:07:59.700 に答える