Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: bonmario - Gennaio 16, 2014, 08:05:59 am

Titolo: Debuggare il risultato di una funzione
Inserito da: bonmario - Gennaio 16, 2014, 08:05:59 am
Ciao a tutti,
supponiamo di avere la funzione
Codice: [Seleziona]
Function Pippo:integer;

e di avere nel programma la seguente istruzione:
Codice: [Seleziona]
if pippo = 1 then begin

se sono in debug, c'è qualche trucco per vedere il risultato di pippo senza assegnarne il valore ad una variabile?

Grazie, Mario
Titolo: Re:Debuggare il risultato di una funzione
Inserito da: Stilgar - Gennaio 16, 2014, 09:15:24 am
Con Windows e il debugger di lazarus non ho trovato il modo.
Se volessi vedere il risultato "low level" dovresti controllare i registri del processore.
Alla fine della fiera il risultato è "depositato" dentro i registri. Questo implica che dovresti conoscere a menadito il "protocollo" che Freepascal implementa nelle chiamate.
A naso direi che può depositare il risultato in AX o EAX, ma questo vale per architetture Intel compatibili.
Non so per altri processori come ARM come possa funzionare ;)

Stilgar
Titolo: Re:Debuggare il risultato di una funzione
Inserito da: nomorelogic - Gennaio 16, 2014, 09:33:36 am
è una cosa che farebbe tanto comodo anche a me ma credo che non si possa avere questa funzionalità (vorrebbe dire che il debugger lancia la funzione per poi rilanciarla quando si va avanti con il programma...)

puoi provare mettendo un breakpoint all'interno della funzione Pippo dove assegni il valore a result
Titolo: Re:Debuggare il risultato di una funzione
Inserito da: xinyiman - Gennaio 16, 2014, 11:22:40 am
Purtroppo al momento le uniche vie sono quelle che ti sono state proposte da Stilgar e Nomore
Titolo: Re:Debuggare il risultato di una funzione
Inserito da: bonmario - Gennaio 16, 2014, 01:28:10 pm
è una cosa che farebbe tanto comodo anche a me ma credo che non si possa avere questa funzionalità (vorrebbe dire che il debugger lancia la funzione per poi rilanciarla quando si va avanti con il programma...)

puoi provare mettendo un breakpoint all'interno della funzione Pippo dove assegni il valore a result

Nell'esempio che ho fatto prima, io metterei il breakpoint sull'istruzione "if", quindi sarebbe già stata eseguita la funzione.

La mia domanda deriva dal fatto che stavo debuggando un programma, e alla fine sono arrivato in un file "inc" di Lazarus, e volevo evitare di modificare quello e il sorgente .pas che lo usa.

Ciao, Mario
Titolo: Re:Debuggare il risultato di una funzione
Inserito da: nomorelogic - Gennaio 16, 2014, 03:28:12 pm
Nell'esempio che ho fatto prima, io metterei il breakpoint sull'istruzione "if", quindi sarebbe già stata eseguita la funzione.

no, il breakpoint si ferma prima dell'IF
Titolo: Re:Debuggare il risultato di una funzione
Inserito da: bonmario - Gennaio 16, 2014, 07:38:29 pm
Hai ragione ... quando ho la pancia piena ragiono meno !!!!

Ciao, Mario