3

Server 2003 でサービスとして実行される 64 ビット アプリケーションがあります。

VS プロファイラーまたは windbg をアタッチすると、以下のようなコールスタックが多数表示されます。デバッガー (またはプロファイラー) で生成されたプロセスがデバッグ ヒープなどを使用することは理解していますが、このサービスは OS によって開始され、私はそれにアタッチしているだけなので、そうではありません。

スタックを巻き戻す理由がわかりません。そして、プロファイラーは、測定可能な量の時間がそれを行うために費やされていることを示しています. いくつかの詳細情報:

• これらは、Server 2003 で動作する vc9 で構築されたリリース ビットです。

• システム環境変数 _NO_DEBUG_HEAP が 1 に設定されている。

• Microsoft シンボル サーバーを使用しています。

スタック トレースをキャプチャするのはなぜですか? ログを記録しているようですが、どこにあるのかわかりません。

私の目的は、アプリが実際にスタックを巻き戻していることを確認し、それが正しい場合は回避することです。

何か案は?


コールスタック

ntdll!RtlVirtualUnwind
ntdll!RtlpWalkFrameChain
ntdll!RtlCaptureStackBackTrace
ntdll!RtlpCaptureStackTraceForLogging
ntdll!RtlLogStackBackTrace
ntdll!RtlDebugAllocateHeap
ntdll!RtlAllocateHeapSlowly
ntdll!RtlAllocateHeap
MSVCR90!malloc
MSVCR90!operator new
4

2 に答える 2

8

誰かがgflags.exeを使用して、このプロセスまたはシステム全体のユーザー スタック トレース キャプチャを有効にしたり、CRT 割り当て操作の追跡を必要とするその他のフラグを有効にした可能性があります。

こちらの情報を使用して、レジストリでこの可能性を確認できるはずです。

于 2013-01-03T20:00:36.417 に答える
0

スティーブの答えは素晴らしく、長い調査の後、最終的に私たち自身のサーバーの解決につながりました. 私たちの状況は少し異なり、スタック キャプチャの原因は、UMDH キャプチャを定期的に実行するスクリプトによるものでした。UMDH は、そのプロセスに対して初めて実行されるときに、スタック コレクションを有効にします。次の警告が表示されます。

 UMDH has enabled allocation stack collection for the current running process.
于 2014-04-25T21:10:35.447 に答える