Как получить стек вызовов для периодически сбой devenv.com? - PullRequest
0 голосов
/ 07 мая 2009

У меня есть пакетный сценарий DOS для ночных сборок, который вызывает devenv.exe для создания файла решения. Периодически я наблюдаю сбой devenv.com. Я получаю DW20.exe диалог "поделись своей болью".

1) Если нажата кнопка «Отладка», у меня нет обычного окна «Выберите свой отладчик». Скорее, это ничего не делает.

2) Если я запускаю Visual Studio и пытаюсь подключиться к devenv.com, он говорит, что приложение заблокировано или ожидает завершения операции. (Я думаю, потому что это отлажено DW20.exe)

Что бы вы посоветовали мне сделать, чтобы получить приличный стек вызовов?

EDIT

Мне удалось подключить 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

Я обнаружил, что есть замечательные SOS-расширения для WinDBG. Видимо, я могу использовать их для отладки компилятора 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 ]

1 голос
/ 07 мая 2009

Вы можете попробовать установить Средства отладки для Windows , затем использовать параметр -iae (для NTSD / CDB) или параметр -I (для WinDBG), чтобы один из отладчиков из этого пакета отладчик JIT / AeDebug.

0 голосов
/ 08 мая 2009

Это немного многословно, поэтому я опубликую это как ответ. Это взято с сайта Microsoft Connect, в ответ на мою проблему. Читатель может найти это уместным:

Дата: четверг, 7 мая 2009 г. 19:14:52 -0700

Привет из Microsoft Connect!

Это уведомление было сгенерировано для элемента обратной связи: проблемы с ночной сборкой (корзина 365749762), отправленные вами на сайт Microsoft Connect.

Спасибо за сообщение об этой проблеме, с которой вы столкнулись в Visual Studio 2005, и спасибо за предоставленные вами дампы!

Похоже, что проблема в cslangsvc.dll (компиляторе C # в процессе), который DevEnv вызывает для выполнения вашей сборки.

Наше предложение обойти эту проблему попробуйте вместо этого использовать MSBuild для выполнения ваших ночных сборок, поскольку это должно быть более надежным, чем автоматизация DevEnv / build. В частности, вы, скорее всего, избежите этой конкретной проблемы, поскольку MSBuild будет использовать csc.exe для компиляции, а не cslangsvc.dll.

Маловероятно, что мы выпустим новую версию VS 2005, чтобы исправить проблему cslangsvc, поэтому я исправляю эту ошибку, которая не будет исправлена, но, пожалуйста, активируйте ее, если вы все еще видите проблему при использовании MSBuild .

Еще раз спасибо за всю информацию по этому вопросу!

Алекс Тернер Менеджер программы Компилятор Visual C #

0 голосов
/ 08 мая 2009

Я наконец-то пришел к типу исключения и стека вызовов для неисправного компилятора. Я сделал это, сохранив полный файл дампа (.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! ИМПОРТЕР :: 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 байт

...