2010-12-03 8 views
2

私のプロセスは例外を投げずに終了するという珍しい窮地に瀕しています。死にかけているプロセスのコールスタックを取得する方法、つまりプロセスがどのように終了しているかを調べる方法

私のプロセスでexit(0)を呼び出しているような、プロセスが終了しているときの呼び出しスタックを調べたいと思います。

これはネイティブのC++アプリケーションです。これは数百万行にのぼり、どこがうまくいかないのか分かりませんでした。

このような機能はありますか?たとえば、Windbgで実行している場合などですか?

+0

あなたはsys.exit()によって呼び出されていて、oomや他の何かによって殺されていないと確信していますか? – Falmarri

答えて

2

死後のデバッグのために、終了時にプロセスの完全なイメージをダンプするようにProcess Dumperを設定することができます。概要から:自動的にプロセスが 監視されているとき

ダンプは、あなたがしなければならないすべてはあなたのプロセスにアタッチして待っている、

+0

彼はトリガーが必要です、それは大きな問題です。 –

+0

@ハンス - 私はそのコメントを理解していません。終了時に完全なプロセスダンプがなぜ終了したのかを調べるのに役に立たないのはなぜですか? –

+0

ドキュメンテーションはProcess Dumperがプロセスの終了時にトリガできることを示唆しているようですので、追加のトリガは必要ないかもしれません。 – Praetorian

2

WinDbgのは、デフォルトでたときにプロセスが終了壊れるように構成されて終了しました。 もちろん、あなたのプロセスが壊れたら、あなたのコールスタックを持つために 'k'をタイプしてください。

0

MicrosoftのMicrosoft Debugging Toolkitには、ADPlusというユーティリティが付属しています。

ADPlusはたくさんのことをするコマンドラインツールです(明らかに栄光のあるVBスクリプトです)。しかし、あなたと私が気にするのは、死んだプロセスの呼び出しスタックを取得することです。 AdPlusは、未処理の例外が発生した場合に外部プロセスの呼び出しスタックを取得するように設定できます。

構文は次のようなものです:

-pあなたは、プロセスIDに渡す引数です

ADPlus -p <process id> -crash -o <output path> 

。これをプロセスエクスプローラからTListに渡すことができます(私は思っています)。プロセス名を指定できる他の引数がありますが、自分でそれを調べなければなりません。

-crashは、クラッシュ時にミニダンプを生成するように指示するか、未処理の例外が発生した場合に通知します。

-oは、ミニダンプを保存するディレクトリへのパスです。 ADPlusが行うことは、プロセスの名前とタイムスタンプを組み込んだサブディレクトリを作成することです。

アプリケーションを実行すると、アプリケーションが実行され、クラッシュするとADPlusによってミニダンプが作成され、プロセスが終了します。

Microsoftデバッグツールキットは、Windows SDKインストールの一部になりました。あなたはそれを見つけるためにここに行く:

http://www.microsoft.com/whdc/devtools/debugging/default.mspx

ウェブから全体をインストールする小さなアプリをダウンロードするには、ダウンロードリンクをクリックしてください。 インストーラは、インストールするさまざまなコンポーネントに対して多くのオプションを提供します。それらのほとんどを無視し、デバッグツールキットだけをインストールすることができます。