* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Maggio 16, 2024, 04:04:57 pm

Inserisci il nome utente, la password e la durata della sessione.

544 Visitatori, 1 Utente

Autore Topic: Monitorare una variabile in debug  (Letto 5515 volte)

bonmario

  • Hero Member
  • *****
  • Post: 1304
  • Karma: +10/-1
Monitorare una variabile in debug
« il: Febbraio 22, 2012, 08:56:30 am »
Ciao a tutti,
con il debug di Lazarus è possibile monitorare il valore di una variabile facendo in modo che il debug si fermi quando tale variabile viene modificata?
Ho provato a guardare in giro ma non ho capito se col DBG si può fare o no.

Grazie in anticipo, Mario

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3250
  • Karma: +12/-0
Re:Monitorare una variabile in debug
« Risposta #1 il: Febbraio 22, 2012, 09:01:54 am »
Non penso anche se ti dico che non ne sono sicuro. Io so che il debug funziona con il concetto del breackpoint ma non so se segnala anche il cambio del valore di una variabile!
Ieri è passato, domani è futuro, oggi è un dono...

mmxngg

  • Newbie
  • *
  • Post: 25
  • Karma: +0/-0
Re:Monitorare una variabile in debug
« Risposta #2 il: Febbraio 22, 2012, 09:28:48 am »
Ti posizioni sulla variabile e premi shift+F5 (o tasto destro, debug -> add watch point). Ti apre un menù dove puoi mettergli praticamente qualsiasi condizione che attiva o meno il breakpoint (supporta anche le espressioni).

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3250
  • Karma: +12/-0
Re:Monitorare una variabile in debug
« Risposta #3 il: Febbraio 22, 2012, 09:57:34 am »
Buono a sapersi!  ;D
Ieri è passato, domani è futuro, oggi è un dono...

bonmario

  • Hero Member
  • *****
  • Post: 1304
  • Karma: +10/-1
Re:Monitorare una variabile in debug
« Risposta #4 il: Febbraio 22, 2012, 12:07:37 pm »
Ci ho provato, ma non ho capito come funziona.
Ho creato un progetto nuovo e ci ho messo un bottone. Ho aggiunto questo codice:
Codice: [Seleziona]
procedure TForm1.Button1Click(Sender: TObject);
var Idx:Integer;
begin
  for Idx:=1 to 10 do begin
    Form1.Caption:=IntToStr(Idx);
  end;
end;

Sono andato col cursore sotto la variabile Idx ed ho premuto Shift + F5 ed ho compilato i parametri come nell'immagine allegata.
Nella videatina delle watch la mia riga rimane sempre "Disabled".

Il mio scopo è quello di fare in modo che il debug, nel momento in cui la variabile Idx cambia valore, si fermi sulla riga che ha provocato questo cambio di valore.

Ciao, Mario

mmxngg

  • Newbie
  • *
  • Post: 25
  • Karma: +0/-0
Re:Monitorare una variabile in debug
« Risposta #5 il: Febbraio 22, 2012, 02:35:41 pm »
In pratica a te serve un breakpoint a livello globale e non semplicemente condizionato. Sinceramente non avevo mai provato perchè di solito mi bastava il secondo caso o addirittura un breakpoint semplice senza alcuna condizione. La risposta è NI, puoi farlo  ::)

In pratica funziona solo ed esclusivamente sulle variabili che non sono all'interno di una classe o che non sono a livello locale (e fin qui ok). Il tuo caso non può funzionare perchè Idx è locale ed è memorizzata nello stack che non ha un indirizzo di memoria ben definito nel momento in cui assegni il breakpoint (questo mi sa che non lo fa nessun ambiente di sviluppo). Non funziona (e dovrebbe) quando le variabili sono all'interno di una classe...probabilmente non è in grado di risalire correttamente all'indirizzo in memoria (è un bug). In pratica devi dichiarare la variabile dopo l'implementation e li aggiungere il breakpoint.

P.S.

Se all'interno delle watch la riga è disabled la devi attivare premendo sulla lampadina, se è corretta ti appare la scritta Valid altrimenti Invalid (Idx è Invalid, una variabile in una classe risulta Valid ma non si blocca...).

Quando si attiva ottieni una videata di questo tipo (notare che entrambe le variabili sono Enabled ma solo una funziona...vabbè).

« Ultima modifica: Febbraio 22, 2012, 02:48:33 pm da mmxngg »

bonmario

  • Hero Member
  • *****
  • Post: 1304
  • Karma: +10/-1
Re:Monitorare una variabile in debug
« Risposta #6 il: Febbraio 22, 2012, 06:40:39 pm »
Grazie !!!
Stasera non ho tempo, ma domani ci riprovo al lavoro.

Toglimi una curiosità: per come dichiari "Pippo", non dovrebbe essere una "Var"?
Io di solito dichiaro le var come hai fatto tu. le const le dichiaro in questo modo:

const CstColNomeFile=0;

La dichiarazione così come l'hai fatta tu di una const non l'ho mai vista !!!!!!

Ciao, Mario

mmxngg

  • Newbie
  • *
  • Post: 25
  • Karma: +0/-0
Re:Monitorare una variabile in debug
« Risposta #7 il: Febbraio 22, 2012, 07:26:45 pm »
Premessa : utilizzo Lazarus da meno di 3 settimane quindi vado a logica secondo gli altri linguaggi.

Dichiarando Pippo come Const Pippo = 0 crei una semplice dichiarazione di un valore assoluto (un alias) che non è assegnato a nessun indirizzo di memoria, con l'altro sistema crei una variabile e gli assegni un valore iniziale (una costante e non un alias). Tanto per dirne una, con il primo metodo non potresti utilizzare il breakpoint o utilizzare la costante in una routine dichiarata così :

procedure Test(var Qualcosa: Integer);

Questo perchè la routine Test potrebbe modificare la variabile Qualcosa e ha bisogno di un indirizzo reale. In sostanza dipende che ci devi fare, se è realmente una costante che non verrà mai variata allora è preferibile il primo metodo, altrimenti il secondo (cambia il modo con cui il compilatore tratta il dato).

Poi magari ho detto delle cazzate e in quel caso significa che Lazarus tratta il dato come variant (pessima cosa...quindi spero di no).

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18820
  • Topic in totale: 2242
  • Online Today: 669
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 1
Guests: 544
Total: 545

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.