Quelle est "l'exception d'instruction Break" dans WinDbg?
Je suis le débogage de certains crashs aléatoires de bugs, mais en fait très difficile d'aller en profondeur dans. Parce que quand j'ai ouvert le vidage sur incident, seulement trouver une erreur:
0:000> .exr -1
ExceptionAddress: 00000000
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 0
En fait je n'ai pas défini aucun code en dur point d'arrêt dans le code, donc, je recherche à propos de cette exception dans google, certaines personnes ont dit cette exception peut être causé par la corruption de segment.
Donc ma question est,
Est-il une autre raison pour laquelle la cause de cette exception, à l'exception du code en dur point d'arrêt, point d'arrêt manuel pendant le débogage, la corruption de segment?
Une autre question, j'essaie d'utiliser le Vérificateur d'Applications pour vérifier la corruption de segment, je comprends comment ça fonctionne, application verifier va déclencher pause instruction exception lors de la corruption de segment. Mais actuellement, je cours sans application verifier, qui va relever le saut de l'instruction exception?
Informations supplémentaires: pile d'appel pour le thread courant.
*0:000> k
ChildEBP RetAddr
0012f96c 7c827d19 ntdll!KiFastSystemCallRet
0012f970 77e6202c ntdll!NtWaitForMultipleObjects+0xc
0012fa18 7739bbd1 kernel32!WaitForMultipleObjectsEx+0x11a
0012fa74 3b288523 user32!RealMsgWaitForMultipleObjectsEx+0x141
0012fab8 3b32b9bd msenv!EnvironmentMsgLoop+0x1ea
0012fae4 3b32b94d msenv!CMsoCMHandler::FPushMessageLoop+0x86
0012fb0c 3b32b8e9 msenv!SCM::FPushMessageLoop+0xb7
0012fb28 3b32b8b8 msenv!SCM_MsoCompMgr::FPushMessageLoop+0x28
0012fb48 3b32be4e msenv!CMsoComponent::PushMsgLoop+0x28
0012fbe0 3b327561 msenv!VStudioMainLogged+0x482
0012fc0c 3000a4a6 msenv!VStudioMain+0xc1
0012fc38 30007301 devenv!util_CallVsMain+0xff
0012ff14 3000760c devenv!CDevEnvAppId::Run+0x91f
0012ff30 30007680 devenv!WinMain+0x74
0012ffc0 77e6f23b devenv!License::GetPID+0x258
0012fff0 00000000 kernel32!BaseProcessStart+0x23*
Notre application est un Visual Studio.
Ci-dessous est le résultat de l' !analyze-v
0:000> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
*** WARNING: Unable to verify checksum for mscorlib.ni.dll
*************************************************************************
*** ***
*** ***
*** 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: kernel32!pNlsUserInfo ***
*** ***
*************************************************************************
*************************************************************************
*** ***
*** ***
*** 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: kernel32!pNlsUserInfo ***
*** ***
*************************************************************************
FAULTING_IP:
+0
00000000 ?? ???
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 00000000
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 0
FAULTING_THREAD: 00001f1c
DEFAULT_BUCKET_ID: STATUS_BREAKPOINT
PROCESS_NAME: devenv.exe
ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} Breakpoint A breakpoint has been reached.
EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
MANAGED_STACK:
SP IP Function
0012E584 09C8A903 Microsoft_VisualStudio_Design!Microsoft.VisualStudio.NativeMethods.ThrowOnFailure(Int32, Int32[])+0x3b
0012E590 09C8C604 Microsoft_VisualStudio_Design!Microsoft.VisualStudio.Design.VSDesignSurfaceManager.Microsoft.VisualStudio.Shell.Interop.IVsSelectionEvents.OnElementValueChanged(UInt32, System.Object, System.Object)+0x144
StackTraceString: <none>
HResult: 80004005
EXCEPTION_OBJECT: !pe 3115d464
Exception object: 3115d464
Exception type: System.Runtime.InteropServices.COMException
Message: Error HRESULT E_FAIL has been returned from a call to a COM component.
InnerException: <none>
StackTrace (generated):
SP IP Function
0012E584 09C8A903 Microsoft_VisualStudio_Design!Microsoft.VisualStudio.NativeMethods.ThrowOnFailure(Int32, Int32[])+0x3b
0012E590 09C8C604 Microsoft_VisualStudio_Design!Microsoft.VisualStudio.Design.VSDesignSurfaceManager.Microsoft.VisualStudio.Shell.Interop.IVsSelectionEvents.OnElementValueChanged(UInt32, System.Object, System.Object)+0x144
StackTraceString: <none>
HResult: 80004005
MANAGED_OBJECT: !dumpobj 3201988
Name: System.String
MethodTable: 79330a00
EEClass: 790ed64c
Size: 158(0x9e) bytes
(C:\WINDOWS\assembly\GAC_32\mscorlib.0.0.0__b77a5c561934e089\mscorlib.dll)
String: Error HRESULT E_FAIL has been returned from a call to a COM component.
Fields:
MT Field Offset Type VT Attr Value Name
79332c4c 4000096 4 System.Int32 1 instance 71 m_arrayLength
79332c4c 4000097 8 System.Int32 1 instance 70 m_stringLength
793316e0 4000098 c System.Char 1 instance 45 m_firstChar
79330a00 4000099 10 System.String 0 shared static Empty
>> Domain:Value 00219c28:03031198 <<
79331630 400009a 14 System.Char[] 0 shared static WhitespaceChars
>> Domain:Value 00219c28:03031798 <<
EXCEPTION_MESSAGE: Error HRESULT E_FAIL has been returned from a call to a COM component.
MANAGED_OBJECT_NAME: System.Runtime.InteropServices.COMException
LAST_CONTROL_TRANSFER: from 7c827d19 to 7c82860c
PRIMARY_PROBLEM_CLASS: STATUS_BREAKPOINT
BUGCHECK_STR: APPLICATION_FAULT_STATUS_BREAKPOINT
STACK_TEXT:
09c8a903 Microsoft_VisualStudio_Design!Microsoft.VisualStudio.NativeMethods.ThrowOnFailure
09c8c604 Microsoft_VisualStudio_Design!Microsoft.VisualStudio.Design.VSDesignSurfaceManager.Microsoft.VisualStudio.Shell.Interop.IVsSelectionEvents.OnElementValueChanged
STACK_COMMAND: dds 12e584 ; kb
FOLLOWUP_IP:
+9c8a903
09c8a903 8bc6 mov eax,esi
SYMBOL_STACK_INDEX: 0
SYMBOL_NAME: Microsoft_VisualStudio_Design!Microsoft.VisualStudio.NativeMethods.ThrowOnFailure+9c8a903
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: Microsoft_VisualStudio_Design
IMAGE_NAME: Microsoft.VisualStudio.Design.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 0
FAILURE_BUCKET_ID: STATUS_BREAKPOINT_80000003_Microsoft.VisualStudio.Design.dll!Microsoft.VisualStudio.NativeMethods.ThrowOnFailure
BUCKET_ID: APPLICATION_FAULT_STATUS_BREAKPOINT_Microsoft_VisualStudio_Design!Microsoft.VisualStudio.NativeMethods.ThrowOnFailure+9c8a903
Followup: MachineOwner
...
Dans la gestion de la pile, il y a une erreur explicite,Microsoft.VisualStudio.NativeMethods.ThrowOnFailure..
Mais que signifie le com exception de provoquer la rupture de l'instruction exception?
!analyser semble juste vider le niveau géré, le com exception peut-être la dernière erreur dans le niveau géré.
J'ai aussi la recherche de quelque chose à propos de l'interruption et l'exception de google, Normalement, la rupture de l'instruction exception peut être déclenchée dans les conditions suivantes:
1. Coder en dur la demande d'interruption, comme: __asm int 3 (ASM), Système.Diagnostics.Débogueur.Pause (C#), DebugBreak() (WinAPI).
2. OS activer la mémoire moment de l'exécution, comme le Vérificateur d'Applications peuvent déclencher après la corruption de segment de mémoire, la mémoire de dépassement.
3. Compilateur peut avoir un peu de configuration à enble ce qui doit être remplie pour la mémoire non initialisée bloc et à la fin de la fonction(zone vide, après retour chez elle,..). Par exemple, Microsoft VC complier pouvez remplir 0xCC si l'option activer /GZ. 0xCC est en fait un opcode de l' __asm 3 int. Donc si certains d'erreur de provoquer l'exécution de l'application dans un tel bloc, va déclencher un point de rupture.
Correct?
Si, je pense que l'Application Vérificateur doit être le meilleur choix pour trouver la cause racine.
source d'informationauteur Winston
Vous devez vous connecter pour publier un commentaire.
Pour référence future, les Votre débogueur n'est pas en utilisant les symboles appropriés avertissement est dû au fait que vous avez besoin pour ajouter Windows symboles de la Windbg symboles chemin. Voici comment faire:
Ensemble de symboles Microsoft chemin d'accès au serveur automatiquement:
Vous pouvez spécifier un emplacement supplémentaire où télécharger le symbole, par exemple:
Vérifier l'actuel chemin de recherche de symbole:
Vous devriez voir quelque chose comme ceci:
Recharger symboles:
Ensuite, vous serez en mesure de voir les informations relatives à une exception à l'aide de cette commande:
Vous devriez voir une ligne similaire à la suivante:
Bonne chance à la correction des bugs!
La commande à utiliser pour trouver l'exception qui a causé le crash dump est
.ecxr
. Le outpt vous avez obtenu à partir de.exr -1
est incorrecte comme l'ExceptionAddress est zéro.