En aquest tema, aprendrem com depurar i perfilar el codi Assembly per identificar i corregir errors, així com optimitzar el rendiment del nostre codi. La depuració i el perfilat són habilitats essencials per a qualsevol programador, especialment quan es treballa amb llenguatges de baix nivell com l'Assembly.
- Introducció a la Depuració
1.1. Què és la Depuració?
La depuració és el procés de trobar i corregir errors (bugs) en el codi. En el context de l'Assembly, això pot incloure errors de lògica, errors de sintaxi, o problemes amb la gestió de la memòria.
1.2. Eines de Depuració
Algunes eines populars per a la depuració de codi Assembly inclouen:
- GDB (GNU Debugger): Una eina de depuració potent que permet inspeccionar el codi en execució, establir punts de ruptura, i examinar registres i memòria.
- LLDB: Un depurador de codi obert que forma part del projecte LLVM.
- OllyDbg: Un depurador de codi binari per a Windows, útil per a la depuració de codi Assembly x86.
1.3. Conceptes Bàsics de Depuració
- Punts de Ruptura (Breakpoints): Permeten aturar l'execució del programa en un punt específic per inspeccionar l'estat del sistema.
- Passar per Sobre (Step Over): Executa la següent instrucció, però no entra en subrutines.
- Passar per Dins (Step Into): Executa la següent instrucció i entra en subrutines.
- Inspecció de Registres: Permet veure el contingut dels registres de la CPU en temps real.
- Inspecció de Memòria: Permet veure i modificar el contingut de la memòria.
- Depuració amb GDB
2.1. Configuració de GDB
Per utilitzar GDB amb codi Assembly, primer hem de compilar el nostre codi amb informació de depuració. Això es fa afegint l'opció -g
al compilador.
2.2. Començant una Sessió de Depuració
Per iniciar GDB, simplement executem:
2.3. Comandes Bàsiques de GDB
- Establir un Punt de Ruptura:
break [nom_de_funció | línia]
(gdb) break main
- Executar el Programa:
run
(gdb) run
- Passar per Dins:
step
(gdb) step
- Passar per Sobre:
next
(gdb) next
- Inspeccionar Registres:
info registers
(gdb) info registers
- Inspeccionar Memòria:
x/[n][format] [direcció]
(gdb) x/10x $esp
- Introducció al Perfilat
3.1. Què és el Perfilat?
El perfilat és el procés d'analitzar el rendiment del codi per identificar colls d'ampolla i optimitzar l'eficiència. Això inclou mesurar el temps d'execució de diferents parts del codi i l'ús de recursos.
3.2. Eines de Perfilat
Algunes eines populars per al perfilat de codi Assembly inclouen:
- gprof: Una eina de perfilat per a programes compilats amb GCC.
- perf: Una eina de perfilat per a sistemes Linux que proporciona informació detallada sobre el rendiment del sistema.
3.3. Utilitzant gprof
Per utilitzar gprof, primer hem de compilar el nostre codi amb l'opció -pg
.
Després d'executar el programa, es generarà un fitxer gmon.out
que conté les dades de perfilat. Podem analitzar aquestes dades amb la comanda:
3.4. Interpretant els Resultats de gprof
El fitxer de sortida conté informació sobre el temps d'execució de cada funció, el nombre de crides a cada funció, i altres dades útils per a l'optimització.
- Exercicis Pràctics
Exercici 1: Depuració amb GDB
- Escriu un programa Assembly senzill que realitzi operacions aritmètiques bàsiques.
- Compila el programa amb informació de depuració.
- Utilitza GDB per establir punts de ruptura, inspeccionar registres, i corregir qualsevol error.
Exercici 2: Perfilat amb gprof
- Escriu un programa Assembly que realitzi una sèrie de càlculs intensius.
- Compila el programa amb l'opció
-pg
. - Executa el programa i analitza les dades de perfilat amb gprof.
- Identifica colls d'ampolla i proposa millores per optimitzar el rendiment.
- Errors Comuns i Consells
Errors Comuns
- No Compilar amb Informació de Depuració: Assegura't d'utilitzar l'opció
-g
per incloure informació de depuració. - Oblidar Establir Punts de Ruptura: Els punts de ruptura són essencials per aturar l'execució i inspeccionar l'estat del programa.
- No Analitzar Correctament els Resultats de Perfilat: Interpreta correctament les dades de perfilat per identificar colls d'ampolla reals.
Consells Addicionals
- Utilitza Comentaris: Afegeix comentaris al teu codi Assembly per facilitar la depuració.
- Divideix i Vèncer: Divideix el teu codi en parts més petites i depura cada part per separat.
- Revisa la Documentació: Consulta la documentació de les eines de depuració i perfilat per aprofitar totes les seves funcionalitats.
- Conclusió
La depuració i el perfilat són habilitats essencials per a qualsevol programador Assembly. Amb les eines i tècniques adequades, pots identificar i corregir errors, així com optimitzar el rendiment del teu codi. Practica regularment amb exercicis pràctics per millorar les teves habilitats en aquestes àrees.
Amb això, hem completat el tema de depuració i perfilat del codi Assembly. En el proper tema, explorarem aplicacions pràctiques i projectes per posar en pràctica tot el que hem après fins ara.
Curs de Programació en Assembly
Mòdul 1: Introducció al Llenguatge Assembly
- Què és el Llenguatge Assembly?
- Història i Evolució de l'Assembly
- Conceptes Bàsics i Terminologia
- Configuració de l'Entorn de Desenvolupament
Mòdul 2: Fonaments del Llenguatge Assembly
- Comprensió de la CPU i la Memòria
- Registres i les Seves Funcions
- Sintaxi i Estructura Bàsiques
- Escrivint el Teu Primer Programa en Assembly
Mòdul 3: Representació de Dades i Instruccions
- Sistemes Binari i Hexadecimal
- Tipus de Dades i Mides
- Instruccions Aritmètiques
- Instruccions Lògiques
Mòdul 4: Flux de Control
Mòdul 5: Conceptes Avançats d'Assembly
- Interrupcions i Crides de Sistema
- Macros i Assembly Condicional
- Assembly Inline en Llenguatges d'Alt Nivell
- Optimització del Codi Assembly
Mòdul 6: Assembly per a Diferents Arquitectures
Mòdul 7: Aplicacions Pràctiques i Projectes
- Escrivint un Bootloader Simple
- Creant un Nucli Bàsic de Sistema Operatiu
- Interfície amb el Maquinari
- Depuració i Perfilat del Codi Assembly