2009-09-04 6 views
0

J'ai une application Windows Mobile 4.0, écrite en utilisant EVC++ 4.0 SP4 avec MFC, qui présente un crash occasionnel aléatoire sur le terrain. par exemple. Exception ox800000002 à 00112584. Il ne se produit pas sous divers émulateurs et simulateurs, d'où il est très difficile à tracer à l'aide d'un débogueur. Le crash se lève et le type d'adresse et d'exception. Étant donné que j'ai la PDB est-il un moyen de suivre cette adresse à la source. Je ne peux pas recompiler en utilisant VC++ 8 car il ne supporte pas le SDK mobile 4. Je suppose que sans une trace de pile, je ne vais pas avoir beaucoup de joie, car les chances sont que l'exception ne soit pas dans ma source. Ça vaut le coup tout de même.Comment trouver une position de code source à partir d'une adresse donnée par un crash dans Windows CE

Modifier Comme suggéré, j'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  [email protected]@[email protected]  00011000 f 7Par.obj 
' 
' 
' 
0001:001124b8  [email protected]@@[email protected]@[email protected]@[email protected] 0b8 f gxseldrg.obj 
0001:001126d8  [email protected]@@[email protected]@[email protected] 0d8 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 que la pile s'est fragilisée avant que le crash ne soit signalé, et je perds mon temps. Je vais recompiler avec la sortie de l'assembleur pour essayer de l'isoler sur une ligne donnée, mais ne laisse pas beaucoup d'espoir :(

Est-ce que le fichier map affiche des adresses segmentées, par exemple 0001: xxxxxxxxx et le rapport d'erreur non segmenté adresses, je dois effectuer un calcul pour obtenir l'adresse de la carte de l'adresse de l'accident?

Répondre

0

Le plus proche que j'ai pu obtenir était de recompiler avec Windows Mobile 6 sur Visual Studio 8, et s'exécuter sous le débogueur. crash mais n'est pas idéal