Benvenuto! Per postare e godere delle funzionalità del forum registrati, occorrono pochi secondi ed è gratis!

[Guida] Visual C++ Debugger

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
Ciao a tutti,
ho notato che a tutti i coders agli inizi manca un'informazione importantissima per imparare il C/C++

il DEBUGGER!!

Il debugger è importantissimo, sia per imparare che dopo, praticamente ti da la possibilità di eseguire il programma una linea alla volta o per blocchi di codice, analizzando man mano lo stato delle variabili.
E' uno strumento fondamentale sia per capire come un programma funziona e sia, di conseguenza, per capire dove stanno gli errori che fanno funzionare male il nostro programma.

Il debugger è un argomento abbastanza ampio da trattare, ma vediamo quelle poche informazioni basilari che comunque ci permettono di utlizzarlo con successo:

1. i breakpoint
2. lo stepping

------------------
1. I BREAKPOINTS
------------------
Un breakpoint come dice il nome è un punto di interruzione, de che ? dell'esecuzione del codice.
vediamo un esempio molto semplice:

    C++ Programming
  1. int main()
  2. {
  3. int var1=1;
  4. int var2=2;
  5.  
  6. var1=var2;
  7. var1--;
  8. var2++;
  9. }


se eseguiamo questo programma da dentro visualC premendo il pulsante verde di run non vedremmo niente, perchè fa le sue operazioni e finisce.
Ma diciamo che vogliamo analizzare meglio il funzionamento o trovare il motivo di un suo malfunzionamento.
Dobbiamo fermare l'esecuzione del programma da qualche parte e analizzare le variabili, dove lo mettiamo?
Un buon punto è sulla prima istruzione di codice, quindi su:
var1=var2;

Per mettere un breakpoint potete:
1. andare sulla linea di codice dove volete che l'esecuzione si fermi e premere il tasto F9
2. andare a SINISTRA della riga di codice e cliccare con il pulsante sinistro del mouse
In entrambi i casi comparirà una palla rossa per dire che li ci sta un breakpoint:

Spostiamo il mouse a sinistra:
[Immagine: 01718-37a4421f-1165-40d8-978d-a3bbd32a1d55.png]

e clicchiamo:

[Immagine: 01718-682e0e45-04b5-42ec-b087-f0e49a9922b2.png]

Bene abbiamo il nostro breakpoint, ora?
Ora dobbiamo lanciare l'esecuzione del programma,
ATTENZIONE! controllate di essere in modalità "DEBUG":

[Immagine: 01718-5095fcd1-1597-4008-8cb1-05e32dc200de.png]

Una volta eseguito notiamo subito che siamo in modalità DEBUGGING:
[Immagine: 01718-1ec44bb0-e331-4eff-b3e9-7e4538d3e65b.png]

e notiamo anche che l'esecuzione è ferma sul nostro breakpoint (la cui linea ancora NON è stata eseguita):

[Immagine: 01718-629e8ea1-5a80-4708-adfe-9dadc4864946.png]

Intanto che è fermo possiamo indagare sul valore delle variabili, cosa molto utile per scoprire bugs o comunque per capire come l'esecuzione sta procedendo.
Un modo molto pratico è posizionarsi col il mouse sulla variabile che ci interessa e aspettare un attimo:

[Immagine: 01718-999da693-8a0c-47de-bb90-55956c270f62.png]

Però se vogliamo avere una visione di insieme dello stato di piu variabili non è pratico, dovremmo saltare da una all'altra e ricordarci cosa abbiamo visto.
Allora ci viene in aiuto questa finestra (di solito in basso a sinistra):

[Immagine: 01718-9493ae17-26eb-4674-87f7-a72fbc30d661.png]

In questo caso ho cliccato sulla tab "locals" ovvero variabili locali perchè è quella che ci permette di vedere le variabili presenti nel blocco di codice che stiamo esaminando senza dovergli dire noi quali variabili vogliamo vedere.

Se volete voi dirgli quali sono le variabili da controllare, allora cliccate sulla tab "Watch"

Tornando a noi, vediamo che "var1" vale 1
bene proviamo ad eseguire UNA SOLA ISTRUZIONE per vedere cosa succede, quindi premiamo il tasto F10 oppure l'icona step over nella barra in alto:

[Immagine: 01718-7a78d7df-f8c9-4fbe-be6d-8764c72cc396.png]

Se guardiamo l'editor del codice notiamo che la freccia gialla che indica la prossima riga di codice che verrà eseguita si è spostata in giu di uno, quindi l'istruzione var1=var2 è stata eseguita:

[Immagine: 01718-f19e201b-cd9e-459d-a184-29e55bd6d817.png]

La conferma ce l'abbiamo se ci spostiamo col mouse su var1 oppure se controlliamo il suo valore nella finestra delle locals, il valore è diventato 2 a conferma dell'avvenuta esecuzione.

Se non ci interessa piu andare avanti un'istruzione alla volta perchè pensiamo di aver visto quello che ci serviva ed abbiamo finito, possiamo decidere di fare 2 cose:
1. stoppare l'esecuzione brutalmente
2. far proseguire l'esecuzione normalmente

Per stoppare possiamo premere il tasto stop nella barra del debugger
o premere Shift-F5

Per continuare l'esecuzione normalmente possiamo premere il tasto verde nella barra oppure premere F5

Ovviamente se sul percorso dell'esecuzione ci saranno altri breakpoints, si fermerà di nuovo.

Attenzione a fermare il debugging con lo stop, in un programmino come questo non ci sono problemi, ma mettete ad esempio che state debuggando un editor di testo, che dentro ci avete scritto qualcosa di importante, facendo stop il programma terminerà senza chiedervi di salvare e senza eseguire tutto quel codice si pulizia che un programma esegue quando lo si chiude, quindi potreste trovarvi brutte sorprese.

Per ora è tutto poi si vedrà

ciao
Digger



digger
24/07/2011, 13:46
#1
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 24/07/2011, 14:12 da Skyline@69.)

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
Interessante, peccato che ste cose le sapevo già Asd
Ma sono sicuro che Luxor ne sarà entusiasta Blush

24/07/2011, 14:11
#2
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 24/07/2011, 14:19 da digger.)

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
(24/07/2011, 14:11)Skyline@69 Ha scritto:

[Per vedere i link devi REGISTRARTI.]

Interessante, peccato che ste cose le sapevo già Asd

sai anche del disassembly?
io non l'avevo notato fino a poco tempo fa, ma devo dire che è molto carino senza andare tutte le volte in Olly




digger
24/07/2011, 14:19
#3
Cerca

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
(24/07/2011, 14:19)digger Ha scritto:

[Per vedere i link devi REGISTRARTI.]

(24/07/2011, 14:11)Skyline@69 Ha scritto:

[Per vedere i link devi REGISTRARTI.]

Interessante, peccato che ste cose le sapevo già Asd

sai anche del disassembly?
io non l'avevo notato fino a poco tempo fa, ma devo dire che è molto carino senza andare tutte le volte in Olly

Si ed è pure carino, mooolto carino perchè addirittura ti mette la riga dell'istruzione prima del blocco di codice che la rappresenta Smile

24/07/2011, 14:40
#4
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
sisi


digger
24/07/2011, 14:44
#5
Cerca


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  [Guida] Visual C++ 2010 - Errore MSVCR100.dll mancante (rimuovere dipendenze runtime) digger 10 27,564 28/05/2013, 11:19
Ultimo messaggio: digger
  Programma Visual basic Aiuto Danyele360 37 8,614 16/12/2012, 19:53
Ultimo messaggio: pauldomy
  MHS - Autohack (uso del debugger) Templeman22 9 2,467 10/08/2011, 14:18
Ultimo messaggio: Skyline@69



Utenti che stanno guardando questa discussione: 1 Ospite(i)