断続的にクラッシュするdevenv.comのコールスタックを取得する方法
-
08-07-2019 - |
質問
devenv.exeを呼び出してソリューションファイルを作成する夜間ビルドDOSバッチスクリプトがあります。断続的にdevenv.comのクラッシュを観察します。 DW20.exeを取得します。「痛みを分かち合います」ダイアログ。
1)[デバッグ]ボタンが押された場合、通常の「デバッガを選択」が表示されません。窓。むしろ、何もしません。
2)Visual Studioを起動してdevenv.comにアタッチしようとすると、アプリケーションがデッドロックしているように見えるか、操作が完了するのを待っていると表示されます。 (DW20.exeによってデバッグされているためだと思います)
適切なコールスタックを取得するには、どのような方法をお勧めしますか?
編集
WinDBGをアタッチすることに成功しました。 kコマンドを実行しました。以下は、コンパイラチームに渡すことができる意味のあるもののように見えますか?現在の例外を確認する方法はありますか?
(e90.fb8): Break instruction exception - code 80000003 (!!! second chance !!!)
eax=0012ccb8 ebx=04ed2750 ecx=0111bdc4 edx=5a57f004 esi=00000000 edi=14ed1000
eip=77e4bef7 esp=0012ccb4 ebp=0012cd08 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\kernel32.dll -
kernel32!RaiseException+0x3c:
77e4bef7 5e pop esi
Missing image name, possible paged-out or corrupt data.
Missing image name, possible paged-out or corrupt data.
Missing image name, possible paged-out or corrupt data.
Missing image name, possible paged-out or corrupt data.
0:000> k
ChildEBP RetAddr
WARNING: Stack unwind information not available. Following frames may be wrong.
0012cd08 5a760cf1 kernel32!RaiseException+0x3c
0012cd58 5a766105 cslangsvc!InMemoryCompile+0x4c6c1
0012cd7c 5a767375 cslangsvc!InMemoryCompile+0x51ad5
0012cd84 5a767637 cslangsvc!InMemoryCompile+0x52d45
00000000 00000000 cslangsvc!InMemoryCompile+0x53007
!analyze -v
を機能させようとしています。
0:000> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
***** OS symbols are WRONG. Please fix symbols to do analysis.
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: ntdll!_PEB ***
*** ***
*************************************************************************
c0000005 Exception in ext.analyze debugger extension.
PC: 014d7875 VA: 00000000 R/W: 0 Parameter: 0001003f
編集2
WinDBGにはこれらのすばらしいSOS拡張機能があることがわかりました。どうやらそれらを使用してC#コンパイラをデバッグできるようです...
0:000> !PrintException
There is no current managed exception on this thread
0:000> !clrstack
OS Thread Id: 0x9fc (0)
ESP EIP
0012ee08 77e4bef7 [ComPlusMethodFrameGeneric: 0012ee08] Microsoft.Build.Tasks.Hosting.ICscHostObject.Compile()
0012ee18 6be671ab Microsoft.Build.Tasks.Csc.CallHostObjectToExecute()
0012ee48 6c0aed17 Microsoft.Build.Utilities.ToolTask.Execute()
0012ee7c 6bcbb348 Microsoft.Build.BuildEngine.TaskEngine.ExecuteTask(ExecutionMode, System.Collections.Hashtable, Microsoft.Build.BuildEngine.BuildPropertyGroup, Boolean ByRef)
0012ef24 6bcadf87 Microsoft.Build.BuildEngine.Target.ExecuteAllTasks(Microsoft.Build.BuildEngine.DependencyAnalysisResult, System.Collections.Hashtable, System.Collections.Hashtable, Microsoft.Build.BuildEngine.ItemBucket, System.Collections.ArrayList, Microsoft.Build.BuildEngine.BuildPropertyGroup)
0012efa0 6bcac7c0 Microsoft.Build.BuildEngine.Target.ExecuteAllTasks()
0012efec 6bcad05b Microsoft.Build.BuildEngine.Target.Build(System.Collections.IDictionary)
0012f070 6bcacfa6 Microsoft.Build.BuildEngine.Target.Build(System.Collections.IDictionary)
0012f0f4 6bcacfa6 Microsoft.Build.BuildEngine.Target.Build(System.Collections.IDictionary)
0012f178 6bcacfa6 Microsoft.Build.BuildEngine.Target.Build(System.Collections.IDictionary)
0012f1fc 6bc9b20d Microsoft.Build.BuildEngine.Project.DoBuild(System.String[], System.Collections.IDictionary, Boolean)
0012f250 6bca2134 Microsoft.Build.BuildEngine.Engine.BuildProject(Microsoft.Build.BuildEngine.Project, System.String[], System.Collections.IDictionary, Microsoft.Build.BuildEngine.BuildSettings, Boolean)
0012f2ac 6bc9af03 Microsoft.Build.BuildEngine.Project.Build(System.String[], System.Collections.IDictionary)
0012f2c0 04711a36 Microsoft.VisualStudio.Build.ComInteropWrapper.ProjectShim.BuildTarget(System.String, System.Collections.IDictionary)
0012f4f4 79f68cde [GCFrame: 0012f4f4]
0012f650 79f68cde [ComMethodFrame: 0012f650]
私はまだ例外の内容を調べる方法を探しています。 !PrintExceptionは例外を見つけませんでした。
解決 3
これは少し冗長なので、返信として投稿します。私の問題に対応して、Microsoft Connectサイトから取得しました。読者は関連性があると思うかもしれません:
日付:木、2009年5月7日19:14:52 -0700
Microsoft Connectからのご挨拶!
この通知は、Microsoft Connectサイトで送信したフィードバックアイテム:ナイトリービルドのトラブル(バケット365749762)に対して生成されました。
Visual Studio 2005で発生したこの問題を報告していただきありがとうございます。ご提供いただいたダンプに感謝します!
問題はcslangsvc.dll(インプロセスC#コンパイラ)にあり、DevEnvがビルドを実行するために呼び出しています。
この問題を回避するための提案は これは、DevEnv / buildを自動化するよりも堅牢である必要があるため、代わりにMSBuildを使用してナイトリービルドを実行してください。具体的には、MSBuildはcslangsvc.dllではなくcsc.exeをコンパイルに使用するため、この特定の問題を回避する可能性が高くなります。
cslangsvcの問題を修正するためのVS 2005のリリースはありそうにないので、このバグを修正しています。
この問題に関するすべての情報に感謝します!
アレックスターナー プログラムマネージャー Visual C#コンパイラ
他のヒント
Debugging Tools for Windows をインストールしてから、 -iae
オプション(NTSD / CDBの場合)または -I
オプション(WinDBGの場合)は、そのパッケージのデバッガーの1つをJIT / AeDebugデバッガーにします。
ようやく、エラーが発生したコンパイラの例外タイプとコールスタックに到達しました。これを行うには、完全なダンプファイル(.dump / ma c:\ myCSCdump.dmp)を保存し、VS2005で他のプロジェクトファイルを開くときと同じようにダンプファイルを開きます。実行ボタンを押すと、コールスタックウィンドウに次のように表示されます。
kernel32.dll!_RaiseException@16() + 0x3c bytes
cslangsvc.dll!ALLOCHOST :: ThrowOutOfMemoryException()+ 0x10バイト
cslangsvc.dll!PAGEHEAP :: AllocPages()+ 0xc1fd8バイト
cslangsvc.dll!SYMTBL :: GrowTable()+ 0x5bバイト cslangsvc.dll!BSYMMGR :: AddChild()+ 0x3bバイト cslangsvc.dll!BSYMMGR :: CreateGlobalSym()+ 0x2baバイト cslangsvc.dll!BSYMMGR :: CreateMethod()+ 0xcバイト
cslangsvc.dll!IMPORTER :: ImportMethod()+ 0x1d9バイト
cslangsvc.dll!IMPORTER :: DefineImportedType()+ 0x3b2バイト cslangsvc.dll!CLSDREC :: prepareAggregate()+ 0x8dバイト cslangsvc.dll!COMPILER :: ForceAggStates()+ 0x8eバイト
cslangsvc.dll!COMPILER :: ForceAggStates()+ 0x127バイト cslangsvc.dll!COMPILER :: EnsureState()+ 0x2eバイト cslangsvc.dll!CLSDREC :: CheckForTypeErrors()+ 0x23バイト
cslangsvc.dll!CLSDREC :: CheckForTypeErrors()+ 0x2baバイト
cslangsvc.dll!CLSDREC :: CheckForTypeErrors()+ 0x80バイト
cslangsvc.dll!CLSDREC :: CheckForTypeErrors()+ 0x8aバイト
cslangsvc.dll!CLSDREC :: CheckForTypeErrors()+ 0x8aバイト
cslangsvc.dll!CLSDREC :: CheckForTypeErrors()+ 0x8aバイト
cslangsvc.dll!COMPILER :: CheckForTypeErrors()+ 0x100バイト cslangsvc.dll!COMPILER :: CompileAll()+ 0x546バイト cslangsvc.dll!COMPILER :: Compile()+ 0x7cバイト cslangsvc.dll!CController :: RunCompiler()+ 0x177バイト cslangsvc.dll!CController :: Compile()+ 0x16バイト
cslangsvc.dll!CCSharpProjectSite :: BuildProjectCore()+ 0x5aバイト
cslangsvc.dll!CProjectSite :: BuildProject()+ 0x11バイト
csproj.dll!CCSharpBuildCompiler :: DoMainBuild()+ 0x88バイト
csproj.dll!CCscMSBuildHostObject :: Compile()+ 0x4eバイト
mscorwks.dll!_CLRToCOMWorker@8()+ 0x171バイト