2017-08-18 11 views
0

Je cours une application sur un périphérique, cet appareil peut avoir des accessoires externes connectés à lui avec l'interface série USB. J'ai remarqué que pendant le débranchement de l'accessoire du port USB, l'appareil se bloque. Le spectacle de série du journal que les exceptions données Abort sont jetés:Comment trouver la fonction/instruction d'exception Data Abort à partir du code source?

[ERREUR] PID: 00400003 TID: 0250001A Exception 'données Abandonner' (0x4): Discussion-Id = 0250001a (pième = bd8d2660), Proc-Id = 00400002 (PPRC = 8534a5e0) 'Nk.exe', VM-active = 046b0082 (PPRC = bd895298) 'Osl_Spec.exe'

[eRREUR] PID: 00400003 TID: 0250001A PC = 8042f520 (kernel.dll + 0x00014520) RA = cb33fdf0 (+ ??? 0xcb33fdf0) SP = dcfffae8, BVA = 00000014

[eRREUR] PID: 00400003 TID: 0250001A Exception 'exception déclenchée' (0x116): Fil-Id = 0250001a (PTH = bd8d2660), Proc-Id = 00400002 (pprc = 8534a5e0) 'NK.EXE', VM actif = 046b0082 (pprc = bd895298) 'Osl_Spec.exe'

[ERREUR] PID: 00400003 TID: 0250001A PC = eff0e4d8 (k.coredll.dll + 0x0001e4d8) RA = 80429648 (kernel.dll + 0x0000e648) SP = dcfff1fc, BVA = FFFFFFFF

[ERREUR] PID : 00400003 TID: 0250001A Exception 'Data Abort' (0x4): ID de thread = 0250001a (pth = bd8d2660), Proc-Id = 00400002 (pprc = 8534a5e0) 'NK.EXE', VM-active = 046b0082 (pprc = bd895298) 'Osl_Spec.exe'

[eRREUR] PID: 00400003 TID: 0250001A PC = 8042f520 (kernel.dll + 0x00014520) RA = cb33fdf0 (+ ??? 0xcb33fdf0) SP = dcfffad4, BVA = 00000014

[ERREUR] PID: 00400003 TID: 0250001A Exception 'Exception augmentée' (0x116): Thre ad-Id = 0250001a (PTH = bd8d2660), Proc-Id = 00400002 (PPRC = 8534a5e0) 'Nk.exe', VM-active = 046b0082 (PPRC = bd895298) 'Osl_Spec.exe'

[ERREUR] PID : 00400003 TID: 0250001A PC = eff0e4d8 (+ k.coredll.dll 0x0001e4d8) RA = 80429648 (+ kernel.dll 0x0000e648) SP = dcfff1e8, BVA = FFFFFFFF

Je veux arriver à la partie du code source est responsable de ces exceptions. J'ai lu quelques articles qui suggèrent d'utiliser des fichiers MAP du fichier du pilote affiché à côté de RA (adresse de retour) mais dans mes erreurs je vois "???" au lieu d'un nom de fichier de pilote. OSL_SPEC.exe est mon application. Veuillez suggérer comment je peux arriver à la source du problème dans le code.

Répondre

0

Il existe plusieurs façons de le faire, mais vous devez d'abord avoir compilé votre fichier avec l'indicateur de débogage. Si vous avez fait cela, et votre bug est reproductible, alors vous pouvez exécuter votre fichier en mode débogage avec point d'arrêt dans votre code (sur Linux, vous pouvez le faire avec gdb, sur Windows il peut exister ce type d'outil). Si votre bug n'est pas répréhensible, vous devriez trouver un moyen d'intercepter l'exception dans la fonction principale et de renvoyer la pile d'appels. Ensuite, utilisez une copie de addr2line sur Windows pour rechercher la fonction à l'origine de l'exception.

J'ai remarqué que vos journaux parle de kernel.dll et k.coredll.dll. Ces fichiers font-ils partie de votre projet (en tant que lib) ou de votre machine virtuelle? vous devriez jeter un oeil sur ces fichiers (+ adresse offset) s'ils font partie de votre projet.