En aquest tema, explorarem tècniques avançades de depuració en Delphi/Object Pascal. La depuració és una habilitat essencial per a qualsevol programador, ja que permet identificar i corregir errors en el codi. A mesura que els projectes es fan més complexos, les tècniques de depuració avançades esdevenen crucials per mantenir la qualitat del codi i assegurar el correcte funcionament de les aplicacions.

Objectius del Tema

  • Comprendre l'ús de punts de ruptura avançats.
  • Utilitzar la inspecció de variables i expressions.
  • Aplicar tècniques de depuració condicional.
  • Explorar l'ús de la traça de pila (stack trace).
  • Utilitzar eines de perfilatge per optimitzar el rendiment.

  1. Punts de Ruptura Avançats

Punts de Ruptura Condicionals

Els punts de ruptura condicionals permeten aturar l'execució del programa només quan es compleix una condició específica. Això és útil per depurar bucles o situacions on l'error només es produeix sota certes circumstàncies.

Exemple:

var
  i: Integer;
begin
  for i := 1 to 100 do
  begin
    // Punt de ruptura condicional: aturar quan i = 50
    if i = 50 then
      Break; // Aquest és un exemple de condició
  end;
end;

Punts de Ruptura de Memòria

Els punts de ruptura de memòria permeten aturar l'execució quan una adreça de memòria específica és llegida o escrita. Això és útil per depurar problemes relacionats amb l'accés a la memòria.

Exemple:

var
  p: ^Integer;
begin
  New(p);
  p^ := 10; // Punt de ruptura de memòria aquí
  Dispose(p);
end;

  1. Inspecció de Variables i Expressions

Inspecció de Variables

La inspecció de variables permet veure el valor actual de les variables en temps d'execució. Això és útil per entendre l'estat del programa en un moment determinat.

Exemple:

var
  x, y: Integer;
begin
  x := 10;
  y := 20;
  // Inspeccionar x i y aquí
end;

Inspecció d'Expressions

La inspecció d'expressions permet avaluar expressions complexes en temps d'execució. Això és útil per verificar el resultat de càlculs o condicions.

Exemple:

var
  a, b, c: Integer;
begin
  a := 5;
  b := 10;
  c := a + b; // Inspeccionar l'expressió a + b aquí
end;

  1. Depuració Condicional

Depuració Basada en Condicions

La depuració condicional permet aturar l'execució només quan es compleixen certes condicions. Això és útil per depurar errors que només es produeixen en situacions específiques.

Exemple:

var
  i: Integer;
begin
  for i := 1 to 100 do
  begin
    if (i mod 10 = 0) then
    begin
      // Aturar aquí només si i és múltiple de 10
    end;
  end;
end;

  1. Traça de Pila (Stack Trace)

Utilització de la Traça de Pila

La traça de pila permet veure la seqüència de crides de funcions que han portat a un punt específic del programa. Això és útil per entendre el context en què s'ha produït un error.

Exemple:

procedure SubFunc;
begin
  // Error aquí
end;

procedure MainFunc;
begin
  SubFunc;
end;

begin
  MainFunc; // Veure la traça de pila aquí
end;

  1. Eines de Perfilatge

Perfilatge de Rendiment

Les eines de perfilatge permeten mesurar el rendiment del codi i identificar colls d'ampolla. Això és útil per optimitzar el codi i millorar l'eficiència de l'aplicació.

Exemple:

procedure TimeConsumingTask;
begin
  // Codi que consumeix molt de temps
end;

begin
  TimeConsumingTask; // Utilitzar una eina de perfilatge aquí
end;

Exercicis Pràctics

Exercici 1: Punt de Ruptura Condicional

Crea un programa que iteri de l'1 al 100 i atura l'execució quan el valor de la variable sigui 75 utilitzant un punt de ruptura condicional.

Exercici 2: Inspecció d'Expressions

Crea un programa que calculi la suma de dos nombres i inspecciona l'expressió de la suma en temps d'execució.

Exercici 3: Traça de Pila

Crea un programa amb diverses funcions que es criden entre elles i provoca un error en una de les funcions. Utilitza la traça de pila per identificar la seqüència de crides.

Solucions

Solució 1: Punt de Ruptura Condicional

var
  i: Integer;
begin
  for i := 1 to 100 do
  begin
    if i = 75 then
      Break; // Punt de ruptura condicional aquí
  end;
end;

Solució 2: Inspecció d'Expressions

var
  a, b, c: Integer;
begin
  a := 15;
  b := 25;
  c := a + b; // Inspeccionar l'expressió a + b aquí
end;

Solució 3: Traça de Pila

procedure FuncA;
begin
  raise Exception.Create('Error en FuncA');
end;

procedure FuncB;
begin
  FuncA;
end;

procedure FuncC;
begin
  FuncB;
end;

begin
  FuncC; // Veure la traça de pila aquí
end;

Resum

En aquest tema, hem explorat diverses tècniques avançades de depuració en Delphi/Object Pascal, incloent punts de ruptura avançats, inspecció de variables i expressions, depuració condicional, traça de pila i eines de perfilatge. Aquestes tècniques són essencials per identificar i corregir errors en aplicacions complexes, així com per optimitzar el rendiment del codi. Amb la pràctica i l'aplicació d'aquestes tècniques, els programadors poden millorar significativament la qualitat i l'eficiència del seu codi.

Curs de Programació Delphi/Object Pascal

Mòdul 1: Introducció a Delphi/Object Pascal

Mòdul 2: Estructures de Control i Procediments

Mòdul 3: Treballant amb Dades

Mòdul 4: Programació Orientada a Objectes

Mòdul 5: Funcions Avançades de Delphi

Mòdul 6: Desenvolupament d'Interfícies Gràfiques amb VCL i FMX

Mòdul 7: Desenvolupament Web i Mòbil

Mòdul 8: Millors Pràctiques i Patrons de Disseny

Mòdul 9: Projecte Final

© Copyright 2024. Tots els drets reservats