2015-12-28 2 views
0

Nous travaillons sur la puce STM32F103 (ARM Cortex M3) et compilons notre projet avec uVersion (compilateur ARM-MDK). Lorsque le crash s'est produit, nous avons sauvegardé les registres PC et LR. Après cela, nous aimerions mapper les adresses enregistrées dans les registres PC et LR aux lignes de code source pour la lecture humaine en écrivant certains scripts. J'ai lu ce What are .axf files?, qui dit axf contient de telles informations. Mais je ne sais pas comment l'utiliser. Merci beaucoup.Comment mapper l'adresse ARM Cortex M3 PC/LR à la ligne source?

[mise à jour 1]
Aujourd'hui j'ai essayé le fromelf.exe qui peut jeter un peu de débogage des informations utiles (fromelf.exe --text -g E: \ proj_keil \ keil_output \ test.axf), par exemple:

008f5d: SPECIAL(0, 1) : 13 080043cc: ..\init\main.c:23.5 
008f5e: DW_LNS_negate_stmt : 06 
008f5f: SPECIAL(1, 2) : 1a 080043d0: ..\init\main.c:24.5 [ 

Quand je recherche l'adresse PC tombé en panne (0x080043d0), je peux trouver sa ligne de source correspondante, bien que je ne trouve pas la ligne de source d'adresse LR pour cet accident.

Puis-je utiliser fromelf.exe pour résoudre mon problème?

+0

Je ne connais pas ARM-MDK mais la chaîne d'outils gcc a l'utilitaire "addr2line" utilisé à cette fin. Votre toolchain a probablement quelque chose de similaire. Addr2line a besoin du fichier .elf avec l'information de débogage. .axf semble être le même fichier que .elf avec debug .. – mkmk88

Répondre

1

Les informations de symbole et de débogage sont utilisées par le débogueur. L'emplacement actuel du code et la pile d'appel sont directement affichés dans le débogueur.

Si vous voulez post-mortem une adresse particulière, vous pouvez démarrer le débogueur, sur la cible ou dans le simulateur, et demander un désassemblage à cette adresse. Le démontage et, le cas échéant, le code source original seront affichés. Si vous avez besoin de faire ce post-mortem sans informations de débogage, il peut être déterminé manuellement en utilisant les informations du fichier map pour déterminer le symbole public le plus proche, puis les fichiers .lst pour déterminer l'emplacement précis en tant que décalage à partir de l'emplacement de la carte de lien. La génération des fichiers .map et .lst sont des options de projet dans uVision.

+0

Merci @Clifford, aujourd'hui j'ai essayé le fichier fromelf.exe et mis à jour quelques informations à ce sujet, puis-je utiliser fromelf.exe à la place? – bettermanlu

+0

Nice un +1 pour cela –

+0

L'utilisation d'un outil pour extraire les symboles de débogage du code objet fonctionnera tant que le fichier de code d'objet contient réellement des informations de débogage. Le fichier map est généré lors de la construction et est généré indépendamment du fait que les informations de débogage soient compilées. Puisque le débogueur est en général le moyen le plus simple de * déboguer * le code, je ne vois que peu d'avantages à le faire. – Clifford