Nous avons une grande application VB héritée constituée d'un certain nombre de DLL (une douzaine environ), toutes installées dans une seule application serveur COM +. De temps en temps, il arrive quelque chose que les causes dllhost.exe à chavirer (et redémarrer automatiquement), en laissant ce message dans le journal des applications Windows événement ...Exception COM sur "composant personnalisé" - comment identifier DLL?
Le système a appelé un composant personnalisé et ce composant a a échoué et généré une exception. Cela indique un problème avec le composant personnalisé . Avertissez le développeur de ce composant qu'une panne s'est produite et fournissez-lui les informations ci-dessous.
ID d'application serveur: {8CC02F18-2733-4A17-9E5C-1A70CB6B6977}
instance d'application serveur ID: {1940A147-8A5E-45FA-86FE-DAF92A822597}
Nom Application Server: MyTestApp
La nature grave de cette erreur a provoqué la fin du processus.
Exception: C0000005
Adresse: 0x758DA3DASource: Complus
ID d'événement: 4786
Niveau: erreur
À côté de ce journal est un autre, en particulier sur dllhost.exe ..
Nom de l'application défaillante: dllhost.exe, version: 6.0.600 0,16386, horodatage: 0x4549b14e
Nom du module Défaillant: msvcrt.dll, Version: 7.0.6002.18005, horodatage: 0x49e0379e
Code Exception: 0xc0000005
défaut offset: 0x0000a3da
processus Faulting id: 0x83c
Défaillant démarrage de l'application temps: 0x01cb50c507ee0166
chemin défaillant application:% 11
chemin du module défaillant: 12%
Rapport Id:% 13
Je sais qu'il est un failur repérage e dans le runtime C (msvcrt), mais idéalement, j'ai besoin de retracer cela dans la DLL qui est appelée dans msvcrt (probablement avec de mauvaises données/paramètres). Donc, sans installer un débogueur, est-il possible d'identifier la DLL qui provoque cela? J'essaie de voir s'il y a un vidage de mémoire n'importe où je peux utiliser pour analyser hors ligne - et ainsi attacher l'adresse à quelque chose de spécifique. Mais sans cela, je ne suis pas sûr que ce soit possible.
Peut-on demander au sous-système COM de générer une minidump lorsqu'une application hébergée se bloque?
(oui, il peut [probablement] - il y a une case à cocher dans l'onglet 'Dump').
Ceci est sur Windows Server 2008 R1 32 bits (mais aussi pour Server 2003).
Cela n'affecte pas la disponibilité de l'application - COM + redémarre simplement dllhost et l'application continue, mais c'est un inconvénient qu'il serait utile de corriger.
Édition Bon, j'ai un vidage sur incident, j'ai du vent, mais ça n'aide pas.Je ne sais pas si je suis épais (une possibilité) ou quelque chose d'autre :-) Sortie de !analyze -v
est ci-dessous, mais il ne me montre rien dans nos DLL, mais il semble qu'il n'a pas été en mesure de résoudre FAULTING_IP? Je ne suis pas sûr de savoir où aller ensuite. Je me demande si l'un de mes pdb est douteux et vaut la peine d'en générer de nouveaux - accrochés dans le serveur de symboles de Microsoft, donc ils ne devraient pas l'être, mais je ne sais pas pour quel module il signale (apparemment) (BUGCHECK_STR et PRIMARY_PROBLEM_CLASS) (ou sont ces symboles sur le serveur sur lequel le code était initialement exécuté?). Serait-il préférable de mettre les PDB sur le serveur lui-même?
Si non, d'autres idées? J'ai déjà utilisé windbg un peu avant, mais je n'en suis pas un utilisateur régulier, alors peut-être y-a-t-il d'autres incantations que je dois taper pour creuser plus profondément? Guide de bienvenue :-)
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
FAULTING_IP:
+5c112faf02e0d82c
00000000 ?? ???
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 00000000
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 0
FAULTING_THREAD: 00000f1c
DEFAULT_BUCKET_ID: WRONG_SYMBOLS
PROCESS_NAME: dllhost.exe
ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} Breakpoint A breakpoint has been reached.
EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid
MOD_LIST: <ANALYSIS/>
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
MANAGED_STACK: !dumpstack -EE
OS Thread Id: 0xf1c (0)
Current frame:
ChildEBP RetAddr Caller,Callee
LAST_CONTROL_TRANSFER: from 77b15620 to 77b15e74
PRIMARY_PROBLEM_CLASS: WRONG_SYMBOLS
BUGCHECK_STR: APPLICATION_FAULT_WRONG_SYMBOLS
STACK_TEXT:
0022fa68 77b15620 77429884 00000064 00000000 ntdll!KiFastSystemCallRet
0022fa6c 77429884 00000064 00000000 00000000 ntdll!NtWaitForSingleObject+0xc
0022fadc 774297f2 00000064 ffffffff 00000000 kernel32!WaitForSingleObjectEx+0xbe
0022faf0 778e2c44 00000064 ffffffff 00e42374 kernel32!WaitForSingleObject+0x12
0022fb0c 778e2e32 00060848 0022fb5b 00000000 ole32!CSurrogateProcessActivator::WaitForSurrogateTimeout+0x55
0022fb24 00e413a4 0022fb40 00000000 00061d98 ole32!CoRegisterSurrogateEx+0x1e9
0022fcb0 00e41570 00e40000 00000000 00061d98 dllhost!WinMain+0xf2
0022fd40 7742d0e9 7ffde000 0022fd8c 77af19bb dllhost!_initterm_e+0x1a1
0022fd4c 77af19bb 7ffde000 dc2ccd29 00000000 kernel32!BaseThreadInitThunk+0xe
0022fd8c 77af198e 00e416e6 7ffde000 ffffffff ntdll!__RtlUserThreadStart+0x23
0022fda4 00000000 00e416e6 7ffde000 00000000 ntdll!_RtlUserThreadStart+0x1b
STACK_COMMAND: .cxr 00000000 ; kb ; dt ntdll!LdrpLastDllInitializer BaseDllName ; dt ntdll!LdrpFailureData ; ~0s; .ecxr ; kb
FOLLOWUP_IP:
dllhost!WinMain+f2
00e413a4 ff15a410e400 call dword ptr [dllhost!_imp__CoUninitialize (00e410a4)]
SYMBOL_STACK_INDEX: 6
SYMBOL_NAME: dllhost!WinMain+f2
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: dllhost
IMAGE_NAME: dllhost.exe
DEBUG_FLR_IMAGE_TIMESTAMP: 4549b14e
FAILURE_BUCKET_ID: WRONG_SYMBOLS_80000003_dllhost.exe!WinMain
BUCKET_ID: APPLICATION_FAULT_WRONG_SYMBOLS_dllhost!WinMain+f2
Ah - DebugDiag - ça m'a donné quelque chose avec lequel travailler :-) Il est montré que les PDB sont (probablement) corrects aussi. Je serai en mesure de confirmer demain. –