c++ - online - manual de programacion android pdf
¿Cómo podría visualizar gráficamente el diseño de la memoria desde un archivo.map? (2)
Mi herramienta de construcción gcc produce un archivo .map. ¿Cómo visualizo el mapa de memoria gráficamente?
He escrito un programa de C # para mostrar la información en un archivo de Mapa junto con información que normalmente no está presente en el archivo de mapa (como símbolos estáticos siempre que pueda usar binutils
). El código está disponible aquí . En resumen, analiza el archivo del mapa y también utiliza BINUTILS
(si está disponible) para recopilar más información. Para ejecutarlo necesita descargar el código y ejecutar el proyecto en Visual Studio, busque la ruta del archivo de mapa y haga clic en Analyze
.
Nota: solo funciona para archivos de mapas GCC/LD
Captura de pantalla: [
Aquí está el comienzo de un script en Python. Carga el archivo de mapa en una lista de Secciones y Símbolos (la primera mitad). Luego renderiza el mapa usando HTML (o hace lo que quieras con las listas de sections
y symbols
).
Puede controlar el script modificando estas líneas:
with open(''t.map'') as f:
colors = [''9C9F84'', ''A97D5D'', ''F7DCB4'', ''5C755E'']
total_height = 32.0
map2html.py
from __future__ import with_statement
import re
class Section:
def __init__(self, address, size, segment, section):
self.address = address
self.size = size
self.segment = segment
self.section = section
def __str__(self):
return self.section+""
class Symbol:
def __init__(self, address, size, file, name):
self.address = address
self.size = size
self.file = file
self.name = name
def __str__(self):
return self.name
#===============================
# Load the Sections and Symbols
#
sections = []
symbols = []
with open(''t.map'') as f:
in_sections = True
for line in f:
m = re.search(''^([0-9A-Fx]+)/s+([0-9A-Fx]+)/s+((/[[ 0-9]+/])|/w+)/s+(.*?)/s*$'', line)
if m:
if in_sections:
sections.append(Section(eval(m.group(1)), eval(m.group(2)), m.group(3), m.group(5)))
else:
symbols.append(Symbol(eval(m.group(1)), eval(m.group(2)), m.group(3), m.group(5)))
else:
if len(sections) > 0:
in_sections = False
#===============================
# Gererate the HTML File
#
colors = [''9C9F84'', ''A97D5D'', ''F7DCB4'', ''5C755E'']
total_height = 32.0
segments = set()
for s in sections: segments.add(s.segment)
segment_colors = dict()
i = 0
for s in segments:
segment_colors[s] = colors[i % len(colors)]
i += 1
total_size = 0
for s in symbols:
total_size += s.size
sections.sort(lambda a,b: a.address - b.address)
symbols.sort(lambda a,b: a.address - b.address)
def section_from_address(addr):
for s in sections:
if addr >= s.address and addr < (s.address + s.size):
return s
return None
print "<html><head>"
print " <style>a { color: black; text-decoration: none; font-family:monospace }</style>"
print "<body>"
print "<table cellspacing=''1px''>"
for sym in symbols:
section = section_from_address(sym.address)
height = (total_height/total_size) * sym.size
font_size = 1.0 if height > 1.0 else height
print "<tr style=''background-color:#%s;height:%gem;line-height:%gem;font-size:%gem''><td style=''overflow:hidden''>" % /
(segment_colors[section.segment], height, height, font_size)
print "<a href=''#%s''>%s</a>" % (sym.name, sym.name)
print "</td></tr>"
print "</table>"
print "</body></html>"
Y aquí hay una mala representación del HTML que genera: