2009-04-16 15 views
30

Qual è l'uso dei file .map Il linker VC++ produce quando viene utilizzato il parametro/MAP o l'impostazione del progetto "Genera file mappa"? Quando ho bisogno di loro e come posso trarne beneficio?Qual è l'uso dei file .map prodotti dal linker?

+0

GNU Gas genera file '.map' con' -a'. –

risposta

25

Un bell'articolo su come utilizzare i file di mappe per trovare arresti anomali.

http://www.codeproject.com/KB/debug/mapfile.aspx

fare tutto questo manualmente è molto interessante.

Non sono a conoscenza di alcun strumento in grado di leggere il file di mappe e di aiutare a trovare la posizione di arresto anomalo. Se qualcuno lo sa, per favore aggiornaci.

8

Ne hai bisogno raramente, ma possono essere utili nel debug di alcuni problemi perché forniscono informazioni sulla posizione di funzioni e dati.

Ad esempio:

  • informazioni dettagliate su tutti i segmenti (codice, dati e altre).
  • numeri di riga link per codificare

È possibile utilizzare i file di mappatura per strumenti di debug.

+0

Vuoi dire come aprire lo smontaggio del processo e controllare gli indirizzi grezzi? – sharptooth

+0

Questa è una possibilità. Come ho detto, hai bisogno di loro raramente, ma se ne hai bisogno, sei contento che siano disponibili. –

12

Per i sistemi incorporati, i file di mappe sono molto più utili. (Anche se non useresti Visual C++ per questo;)

Cose come sapere quanto sei vicino a esaurire il programma/la memoria di dati e in quale posizione risiede una particolare variabile, sono importanti.

+0

C'è qualcosa sulla piattaforma UNIX simile ai file di elenco? Se sì, come posso generarlo? – Shree

+0

nessuna idea. controlla la documentazione del compilatore. –

8

WinDBG utilizza i file .map e .pdb per facilitare il debug degli arresti anomali durante l'analisi dei dump di arresto anomalo di .hdmp e .mdmp.

Fondamentalmente mappano gli indirizzi di memoria a funzioni e variabili all'interno di .exe (o .dll). Molto utile in generale.

MODIFICA: il modo più utile per eseguire il debug "dopo il fatto" si blocca utilizzando WinDbg per me (piattaforma Windows). Aprilo e apri il crash dump. Quindi imposta il percorso di origine in modo che punti al codice (se ce l'hai), il percorso del simbolo da indirizzare a .map e .pdb e il percorso dell'immagine all'exe e digita "! Analyze -v" nella riga di comando . Ora hai una traccia stack completa con linee di codice e tutto.
È ancora meglio avere il server dei simboli MS nel percorso e se l'heap della pagina completa è stato attivato o è in esecuzione l'adplus. Vedere queste due risorse preferite WinDBG di mine:
Prima tappa :: http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx
Forza caricare i simboli :: http://www.osronline.com/ShowThread.cfm?link=182377
sito Utile :: http://www.dumpanalysis.org/blog/index.php/category/windbg-tips-and-tricks/page/7/

0

mappe Linker può essere molto utile in progetti di grandi dimensioni, quando è necessario tenere traccia dipendenze tra unità di compilazione e librerie. In genere, un linker segnala un simbolo che ha causato problemi e, molto spesso, una semplice ricerca di questo nome simbolo non restituisce alcun risultato (o restituirà tonnellate di falsi positivi per simboli come read).

Senza una mappa del linker, l'unica opzione disponibile è di analizzare tutti i file di origine disponibili (dopo il passaggio di pre-elaborazione se sono stati utilizzati macro, che è in genere il caso) e sperare di trovare il punto pertinente.

Le mappe dei collegamenti di solito hanno una sezione chiamata "riferimento per file/simbolo" che indica quale file oggetto è stato richiesto da un altro file oggetto del progetto e quale simbolo è stato referenziato.

Una volta stavo lavorando a un progetto che doveva essere portato su un sistema senza supporto locale. Il linker riportava "errori di riferimento non definiti a _localeconv_r", il che sarebbe stato un problema da rintracciare cercando tra le fonti. Fortunatamente, un file di mappa del linker GCC generato con -Map=output.map ha rivelato tutte le funzioni problematiche con una singola ricerca.

Problemi correlati