Comment puis-je trouver une position de code source à partir d'une adresse donnée par un accident dans la fenêtre CE

StackOverflow https://stackoverflow.com/questions/1378164

  •  21-09-2019
  •  | 
  •  

Question

J'ai une application Windows Mobile 4.0, écrit en utilisant EVC ++ 4.0 SP4 avec MFC, qui expose un accident au hasard de temps en temps sur le terrain. par exemple. Exception ox800000002 à 00112584. Il ne se produit pas sous divers émulateurs et simulateurs, est donc très difficile de tracer à l'aide d'un débogueur. Le crash jette vers le haut et l'adresse et le type d'exception. Étant donné que je l'APB est-il un moyen de suivre cette adresse à la source. Je ne peux pas recompiler avec VC ++ 8 car il ne supporte pas le 4 mobile SDK.

Je suppose que, sans une trace de pile que je ne vais pas avoir beaucoup de joie, car les chances sont que l'exception ne peut pas être dans ma source. La peine d'essayer tout de même.

Modifier Comme suggéré, je l'ai regardé l'adresse dans le contexte du fichier .map pour le programme. Cela révèle ce qui suit

 Address         Publics by Value              Rva+Base     Lib:Object

 0001:00000000       ?GetUnduValue@@YANMM@Z     00011000 f   7Par.obj
'
'
'
 0001:001124b8       ?OnLButtonUp@CGXGridUserDragSelectRangeImp@@UAAHPAVCGXGridCore@@AAVCPoint@@AAI@Z 001234b8 f   gxseldrg.obj
 0001:001126d8       ?OnSelDragStart@CGXGridUserDragSelectRangeImp@@UAAHPAVCGXGridCore@@KK@Z 001236d8 f   gxseldrg.obj

Ce qui suggère l'erreur est survenue lors CGXGridUserDragSelectRangeImp :: OnLButtonUp (), qui semble un peu bizarre que je ne pense pas qu'il y avait un bouton de la souris / clavier / écran pressé à l'époque. Peut-être la pile obtenu Fragged avant le crash obtenu a rapporté, et je perds mon temps. Je recompiler avec sortie assembleur pour tenter de l'isoler à une ligne donnée, mais ne détiens pas beaucoup d'espoir: (

Le fait que les rapports de fichiers entre les adresses segmentées par exemple 0001: XXXXXXXXX et le rapport d'accident adresses non segmentés signifie que je dois effectuer quelques calculs pour obtenir l'adresse de carte à l'adresse de l'accident

?
Était-ce utile?

La solution

Je pourrais obtenir le plus proche était à recompiler contre Windows Mobile 6 sur Visual Studio 8 et exécuter sous le débogueur. Cela fait attraper un tel accident, mais n'est pas idéal.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top