Exercice 2 – Recopier le code suivant
Exercice 2
- Compiler ce code et construire l’exécutable.
- En utilisant le débogueur gdb , placer un point d’arrêt en début de programme (fonction main) et exécuter pas à pas le programme. Faire la trace de ce programme : vous présenterez le contenu de chaque variable et pointeur à chaque instruction, ainsi que leurs adresses.
int main()
{
int A = 1;
int B = 2;
int C = 3;
int *P1, *P2;
P1=&A;
P2=&C;
*P1=(*P2)++;
P1=P2;
P2=&B;
*P1-=*P2;
++*P2;
*P1*=*P2;
A=++*P2**P1;
return 0;
}
Compilation :
g++ -o exercice2 exercice2.cpp -g
GDB :
- Trace Variable A
// Lancement de GDB
gdb exercice2
// Point d'arret fonction main
break main
// Lancement du programme
run
Starting program: /home/t.defait/tp1210/exercice2
Breakpoint 1, main () at exercice2.cpp:3
int A = 1;
// Ligne suivante
next
int B = 2;
// Affichage de l'adresse
print &A
$5 = (int *) 0x7fffffffe49c
// Ligne suivante
next
int C = 3;
// Ligne suivante
next
P1=&A;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe49c
0x7fffffffe49c: 1 0 0 0
// Ligne suivante
next
*P1=(*P2)++;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4ac
0x7fffffffe4ac: 1 0 0 0
// Ligne suivante
next
P1=P2;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4ac
0x7fffffffe4ac: 3 0 0 0
// Ligne suivante
next
P2=&B;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4ac
0x7fffffffe4ac: 3 0 0 0
// Ligne suivante
next
*P1-=*P2;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4ac
0x7fffffffe4ac: 3 0 0 0
// Ligne suivante
next
++*P2;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4ac
0x7fffffffe4ac: 3 0 0 0
// Ligne suivante
next
*P1*=*P2;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4ac
0x7fffffffe4ac: 3 0 0 0
// Ligne suivante
next
A=++*P2**P1;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4ac
0x7fffffffe4ac: 3 0 0 0
// Ligne suivante
next
return 0;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4ac
0x7fffffffe4ac: 24 0 0 0
-
- Trace Variable B
print &B
$1 = (int *) 0x7fffffffe4a8
// Ligne suivante
next
4 int B = 2;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4a8
0x7fffffffe4a8: -128 4 64 0
// Ligne suivante
next
5 int C = 3;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4a8
0x7fffffffe4a8: 2 0 0 0
// Ligne suivante
next
7 P1=&A;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4a8
0x7fffffffe4a8: 2 0 0 0
// Ligne suivante
next
8 P2=&C;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4a8
0x7fffffffe4a8: 2 0 0 0
// Ligne suivante
next
9 *P1=(*P2)++;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4a8
0x7fffffffe4a8: 2 0 0 0
// Ligne suivante
next
10 P1=P2;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4a8
0x7fffffffe4a8: 2 0 0 0
// Ligne suivante
next
11 P2=&B;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4a8
0x7fffffffe4a8: 2 0 0 0
// Ligne suivante
next
12 *P1-=*P2;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4a8
0x7fffffffe4a8: 2 0 0 0
// Ligne suivante
next
13 ++*P2;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4a8
0x7fffffffe4a8: 2 0 0 0
// Ligne suivante
next
14 *P1*=*P2;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4a8
0x7fffffffe4a8: 3 0 0 0
// Ligne suivante
next
15 A=++*P2**P1;
// Affichage de la mémoire 4fois en décimale et en octet
x/4db 0x7fffffffe4a8
0x7fffffffe4a8: 3 0 0 0
// Ligne suivante
next
return 0;
x/4db 0x7fffffffe4a8
0x7fffffffe4a8: 4 0 0 0
- Trace Variable C, P1, P2
(gdb) print &C
$1 = (int *) 0x7fffffffe494
(gdb) print &P1
$2 = (int **) 0x7fffffffe4a8
(gdb) print &P2
$3 = (int **) 0x7fffffffe4a0
(gdb) next
7 P1=&A;
(gdb) x/1dw 0x7fffffffe494 //(x)Afficher le contenu de la Variable C /(1)1 fois (d)en format décimal (w)sur un mot.
0x7fffffffe494: 3
(gdb) x/1dw 0x7fffffffe4a8 //(x)Afficher le contenu de la Variable P1 /(1)1 fois (d)en format décimal (w)sur un mot.
0x7fffffffe4a8: 0
(gdb) x/1dw 0x7fffffffe4a0 //(x)Afficher le contenu de la Variable P2 /(1)1 fois (d)en format décimal (w)sur un mot.
0x7fffffffe4a0: -6768
(gdb) next
8 P2=&C;
(gdb) x/1dw 0x7fffffffe494
0x7fffffffe494: 3
(gdb) x/1dw 0x7fffffffe4a8
0x7fffffffe4a8: -7012
(gdb) x/1dw 0x7fffffffe4a0
0x7fffffffe4a0: -6768
(gdb) next
9 *P1=(*P2)++;
(gdb) x/1dw 0x7fffffffe494
0x7fffffffe494: 3
(gdb) x/1dw 0x7fffffffe4a8
0x7fffffffe4a8: -7012
(gdb) x/1dw 0x7fffffffe4a0
0x7fffffffe4a0: -7020
(gdb) next
10 P1=P2;
(gdb) x/1dw 0x7fffffffe494
0x7fffffffe494: 4
(gdb) x/1dw 0x7fffffffe4a8
0x7fffffffe4a8: -7012
(gdb) x/1dw 0x7fffffffe4a0
0x7fffffffe4a0: -7020
(gdb) next
11 P2=&B;
(gdb) x/1dw 0x7fffffffe494
0x7fffffffe494: 4
(gdb) x/1dw 0x7fffffffe4a8
0x7fffffffe4a8: -7020
(gdb) x/1dw 0x7fffffffe4a0
0x7fffffffe4a0: -7020
(gdb) next
12 *P1-=*P2;
(gdb) x/1dw 0x7fffffffe494
0x7fffffffe494: 4
(gdb) x/1dw 0x7fffffffe4a8
0x7fffffffe4a8: -7020
(gdb) x/1dw 0x7fffffffe4a0
0x7fffffffe4a0: -7016
(gdb) next
13 ++*P2;
(gdb) x/1dw 0x7fffffffe494
0x7fffffffe494: 2
(gdb) x/1dw 0x7fffffffe4a8
0x7fffffffe4a8: -7020
(gdb) x/1dw 0x7fffffffe4a0
0x7fffffffe4a0: -7016
(gdb) next
14 *P1*=*P2;
(gdb) x/1dw 0x7fffffffe494
0x7fffffffe494: 2
(gdb) x/1dw 0x7fffffffe4a8
0x7fffffffe4a8: -7020
(gdb) x/1dw 0x7fffffffe4a0
0x7fffffffe4a0: -7016
(gdb) next
15 A=++*P2**P1;
(gdb) x/1dw 0x7fffffffe494
0x7fffffffe494: 6
(gdb) x/1dw 0x7fffffffe4a8
0x7fffffffe4a8: -7020
(gdb) x/1dw 0x7fffffffe4a0
0x7fffffffe4a0: -7016
(gdb) next
16 return 0;
(gdb) x/1dw 0x7fffffffe494
0x7fffffffe494: 6
(gdb) x/1dw 0x7fffffffe4a8
0x7fffffffe4a8: -7020
(gdb) x/1dw 0x7fffffffe4a0
0x7fffffffe4a0: -7016
Edited by Tanguy DEFAIT