0

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 は例外を検出しませんでした。

4

3 に答える 3

1

Windows 用のデバッグ ツールをインストールしてから、-iaeオプション (NTSD/CDB の場合) または-Iオプション (WinDBG の場合) を使用して、そのパッケージのデバッガーの 1 つを JIT/AeDebug デバッガーにすることができます。

于 2009-05-07T15:21:30.143 に答える
0

I finally arrived at an exception type and callstack for the faulting compiler. I did this by saving a full dump file (.dump /ma c:\myCSCdump.dmp), then opening the dump file as you would open any other project file in VS2005. Pressing the run button produced the following in the call stack window:

kernel32.dll!_RaiseException@16()  + 0x3c bytes 

cslangsvc.dll!ALLOCHOST::ThrowOutOfMemoryException() + 0x10 bytes
cslangsvc.dll!PAGEHEAP::AllocPages() + 0xc1fd8 bytes
cslangsvc.dll!SYMTBL::GrowTable() + 0x5b bytes cslangsvc.dll!BSYMMGR::AddChild() + 0x3b bytes cslangsvc.dll!BSYMMGR::CreateGlobalSym() + 0x2ba bytes cslangsvc.dll!BSYMMGR::CreateMethod() + 0xc bytes
cslangsvc.dll!IMPORTER::ImportMethod() + 0x1d9 bytes
cslangsvc.dll!IMPORTER::DefineImportedType() + 0x3b2 bytes cslangsvc.dll!CLSDREC::prepareAggregate() + 0x8d bytes cslangsvc.dll!COMPILER::ForceAggStates() + 0x8e bytes
cslangsvc.dll!COMPILER::ForceAggStates() + 0x127 bytes cslangsvc.dll!COMPILER::EnsureState() + 0x2e bytes cslangsvc.dll!CLSDREC::CheckForTypeErrors() + 0x23 bytes
cslangsvc.dll!CLSDREC::CheckForTypeErrors() + 0x2ba bytes
cslangsvc.dll!CLSDREC::CheckForTypeErrors() + 0x80 bytes
cslangsvc.dll!CLSDREC::CheckForTypeErrors() + 0x8a bytes
cslangsvc.dll!CLSDREC::CheckForTypeErrors() + 0x8a bytes
cslangsvc.dll!CLSDREC::CheckForTypeErrors() + 0x8a bytes
cslangsvc.dll!COMPILER::CheckForTypeErrors() + 0x100 bytes cslangsvc.dll!COMPILER::CompileAll() + 0x546 bytes cslangsvc.dll!COMPILER::Compile() + 0x7c bytes cslangsvc.dll!CController::RunCompiler() + 0x177 bytes cslangsvc.dll!CController::Compile() + 0x16 bytes
cslangsvc.dll!CCSharpProjectSite::BuildProjectCore() + 0x5a bytes
cslangsvc.dll!CProjectSite::BuildProject() + 0x11 bytes
csproj.dll!CCSharpBuildCompiler::DoMainBuild() + 0x88 bytes
csproj.dll!CCscMSBuildHostObject::Compile() + 0x4e bytes
mscorwks.dll!_CLRToCOMWorker@8() + 0x171 bytes

于 2009-05-07T20:20:20.567 に答える
0

ややこしいので、回答として載せておきます。私の問題に対応して、Microsoft Connect サイトから取得したものです。読者はそれが関連していると思うかもしれません:

日付: 2009 年 5 月 7 日 (木) 19:14:52 -0700

Microsoft Connect からこんにちは。

この通知は、Microsoft Connect サイトで送信したフィードバック アイテム: ナイトリー ビルドのトラブル (バケット 365749762) に対して生成されました。

Visual Studio 2005 で発生したこの問題を報告していただき、ありがとうございます。また、ダンプを提供していただきありがとうございます。

問題は、ビルドを実行するために DevEnv が呼び出している cslangsvc.dll (インプロセス C# コンパイラ) にあるようです。

この問題を回避するには、DevEnv /build を自動化するよりも堅牢であるため、代わりに MSBuild を使用してナイトリー ビルドを実行することをお勧めします。特に、MSBuild はコンパイルに cslangsvc.dll ではなく csc.exe を使用するため、この特定の問題を回避できる可能性があります。

cslangsvc の問題を修正するための VS 2005 のリリースがさらに行われる可能性は低いので、このバグを解決しています。

この問題に関するすべての情報をありがとう!

Alex Turner プログラム マネージャー Visual C# コンパイラ

于 2009-05-08T02:55:28.447 に答える