1

C++/CLR でアプリケーションを作成しました。ネイティブの lib/dll を使用します。まれに、このネイティブ dll 内でクラッシュすることがあります。次に、スタックトレースを取得しますが、マネージド部分までのみで、内部のネイティブ部分は省略されています。スタックトレース全体を表示させる方法はありますか?

次のテストを行いました。ネイティブ dll 内に、常にクラッシュするようにするコード行を追加しました。exeをダブルクリックして実行すると、先ほどと同様に管理部分のスタックトレースが取得されます。デバッガーを接続して (F5 キーを押すだけで) VS2008 から実行してクラッシュすると、スタック トレース全体、マネージド部分とアンマネージド部分が表示されます。

実際のバグはめったに発生しないため、ユーザーが VS を介してインストールして実行することなく、スタック トレース全体を何らかの形で表示する何かをアプリケーションに追加したいと考えています。それを行う方法はありますか?

Thx マーク

4

2 に答える 2

0

Sysinternals Process Explorer ( http://technet.microsoft.com/de-de/sysinternals/bb896653.aspx ) を使用すると、現在実行中のプロセスのスタックを確認できます。多分これはあなたを助けるでしょう...

于 2009-09-22T15:22:43.320 に答える
0

それは非常に重要です。次のリンクをお勧めします。

Windows / 64 ビット / 混合モードでの高速キャプチャ スタック トレース

マネージド スタック トレースとネイティブ スタック トレースの解決 - どの API を使用するか?

しかし、私が試したことは、このようなスタック決定を使用しても、ネイティブ側で例外が発生すると、マネージド側に SEHException として伝播し、マネージド側で制御を取得するまでに、部分的な呼び出しスタックが既に失われています。(ネイティブ部分)。例外が発生した時点でネイティブ コール スタックを特定することは可能ですが、これはまだ記述する必要があります。

必要に応じて、フリーランサーとしてこの仕事をすることもできます。

于 2016-02-21T09:31:04.323 に答える