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.

  1. 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.

  1. 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.

gcc -g -o programa programa.s

2.2. Començant una Sessió de Depuració

Per iniciar GDB, simplement executem:

gdb ./programa

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
    

  1. 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.

gcc -pg -o programa programa.s

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:

gprof ./programa gmon.out > perfil.txt

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ó.

  1. Exercicis Pràctics

Exercici 1: Depuració amb GDB

  1. Escriu un programa Assembly senzill que realitzi operacions aritmètiques bàsiques.
  2. Compila el programa amb informació de depuració.
  3. Utilitza GDB per establir punts de ruptura, inspeccionar registres, i corregir qualsevol error.

Exercici 2: Perfilat amb gprof

  1. Escriu un programa Assembly que realitzi una sèrie de càlculs intensius.
  2. Compila el programa amb l'opció -pg.
  3. Executa el programa i analitza les dades de perfilat amb gprof.
  4. Identifica colls d'ampolla i proposa millores per optimitzar el rendiment.

  1. 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.

  1. 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.

© Copyright 2024. Tots els drets reservats