4

プロセスが開始するとすぐに、明らかにユーザーコードが実行される前に、このエラーが発生するC++プログラムがあります。インライン化が有効になっている場合にのみ発生します。デバッグシンボルが組み込まれていても、コードにステップインできません。Visual StudioでF10キーを押すとすぐにエラーが発生し、プログラムが停止します。「デバッグ/例外」ですべての例外/チェックをチェックしましたが、それでも中断はありません。

通常、このようなものは実行時の依存関係が欠落していることが原因であると予想しますが、ここではそうではないことを確信しています(Dependency Walkerで確認済み)。

編集:Steve TownsendのCDBの推奨事項を使用しましたが、プログラムのユーザーコード前の部分をステップスルーできるようになりました。最終的なスタックトレースは次のとおりです。

Child-SP          RetAddr           Call Site
00000000`0008e308 00000000`7541601a ntdll!ZwTerminateProcess+0xa
00000000`0008e310 00000000`7540cf87 wow64!Wow64EmulateAtlThunk+0x86ba
00000000`0008e340 00000000`7539276d wow64!Wow64SystemServiceEx+0xd7
00000000`0008ec00 00000000`7540d07e wow64cpu!TurboDispatchJumpAddressEnd+0x24
00000000`0008ecc0 00000000`7540c549 wow64!Wow64SystemServiceEx+0x1ce
00000000`0008ed10 00000000`7776ae27 wow64!Wow64LdrpInitialize+0x429
00000000`0008f260 00000000`777672f8 ntdll!LdrGetKnownDllSectionHandle+0x1a7
00000000`0008f760 00000000`77752ace ntdll!RtlInitCodePageTable+0xe8
00000000`0008f7d0 00000000`00000000 ntdll!LdrInitializeThunk+0xe
4

2 に答える 2

2

Process Dumperをセットアップして、EXE 用に構成し、プロセスの終了時にダンプを作成することができます。次に、コマンド ラインからプロセスを開始して、IDE のアーティファクトを除外します。

これにより、事後分析デバッグ用のダンプが得られるはずです。また、有用な終了スレッドからのコールスタックも得られるはずです。

于 2011-06-28T15:29:17.307 に答える
1

おそらく、グローバルが初期化される順序に関係しています。C++ では、モジュール間の順序は規定されていません。したがって、グローバルのイニシャライザが、すでに初期化されている別のモジュールのグローバルに依存している場合、問題が発生します。

main (または wmain、WinMain、または使用しているもの) を呼び出す前に実行される CRT 初期化コードにブレーク ポイントを配置することができます。そのコードをステップ実行して、問題の原因を確認できます。

別の原因として、DllMain 関数がエラーを返しているか、DLL_PROCESS_ATTACH 中に例外をスローしていることが考えられます。

于 2011-06-28T16:06:06.923 に答える