This shows you the differences between two versions of the page.
so:laboratoare:resurse:gdb [2013/05/22 01:58] ghennadi.procopciuc [Depanarea unui proces] |
so:laboratoare:resurse:gdb [2015/03/18 22:55] (current) marius.ungureanu93 Explicitly mention function results, fix some diacritics |
||
---|---|---|---|
Line 60: | Line 60: | ||
Câteva din comenzile de bază în ''gdb'' sunt: | Câteva din comenzile de bază în ''gdb'' sunt: | ||
- | * **breakpoint** - primeşte ca argument un nume de funcţie (ex: main), un număr de linie şi, eventual, un fişier (ex: break sursa.c:50) sau o adresă (ex: break *0x80483d3). | + | * **b[reakpoint]** - primeşte ca argument un nume de funcţie (ex: main), un număr de linie şi, eventual, un fişier (ex: break sursa.c:50), o funcţie (b sursa.c:my_function) sau o adresă (ex: breakpoint *0x80483d3). |
- | * **next** - va continua execuţia programului până ce se va ajunge la următoarea linie din codul sursă. Dacă linia de executat conţine un apel de funcţie, funcţia se va executa complet. | + | * **n[ext]** - va continua execuţia programului până ce se va ajunge la următoarea linie din codul sursă. Dacă linia de executat conţine un apel de funcţie, funcţia se va executa complet. |
- | * **step** - dacă se doreşte şi inspectarea funcţiilor. | + | * **s[tep]** - dacă se doreşte şi inspectarea funcţiilor. |
+ | * **fin[ish]** - dacă se doreşte ieşirea din funcţia curentă. | ||
Folosirea acestor comenzi este exemplificată mai jos: | Folosirea acestor comenzi este exemplificată mai jos: | ||
Line 157: | Line 158: | ||
</columns> | </columns> | ||
- | ***print** - cu ajutorul acesteia se pot afişa valorile variabilelor din funcţia curentă sau a variabilelor globale. ''print'' poate primi ca argument şi expresii complicate (dereferenţieri de pointeri, referenţieri ale variabilelor, expresii aritmetice, aproape orice expresie C validă). În plus, ''print'' poate afişa structuri de date precum ''struct'' şi ''union''. | + | ***print** - cu ajutorul acesteia se pot afişa valorile variabilelor din funcţia curentă sau a variabilelor globale. ''print'' poate primi ca argument şi expresii complicate (dereferenţieri de pointeri, referenţieri ale variabilelor, expresii aritmetice, aproape orice expresie C validă). În plus, ''print'' poate afişa structuri de date precum ''struct'' şi ''union'' sau evalua funcţii şi întoarcerea rezultatului lor. |
<columns 100% 40% -> | <columns 100% 40% -> | ||
Line 174: | Line 175: | ||
(gdb) print b | (gdb) print b | ||
$2 = 2 | $2 = 2 | ||
+ | (gdb) print f(a, b) | ||
+ | $3 = 3 | ||
(gdb) print c | (gdb) print c | ||
- | $3 = 1073792080 | + | $4 = 1073792080 |
(gdb) next | (gdb) next | ||
7 return c; | 7 return c; | ||
(gdb) print c | (gdb) print c | ||
- | $4 = 3 | + | $5 = 3 |
(gdb) finish | (gdb) finish | ||
Run till exit from #0 f (a=1, b=2) at add.c:7 | Run till exit from #0 f (a=1, b=2) at add.c:7 | ||
Line 221: | Line 224: | ||
</code> | </code> | ||
</columns> | </columns> | ||
- | |||
===== Depanarea unui proces ===== | ===== Depanarea unui proces ===== | ||
Line 290: | Line 292: | ||
13 return -1; | 13 return -1; | ||
14 } else if (childPID == 0) { | 14 } else if (childPID == 0) { | ||
- | 15 | + | 15 |
16 // We are in the child process | 16 // We are in the child process | ||
17 printf("The child process is executing...\n"); | 17 printf("The child process is executing...\n"); | ||
18 sleep(2); | 18 sleep(2); | ||
- | 19 | + | 19 |
20 } else { | 20 } else { | ||
- | 21 | + | 21 |
22 // We are in the parent process | 22 // We are in the parent process | ||
23 if (wait(NULL) < 0) { | 23 if (wait(NULL) < 0) { | ||
Line 303: | Line 305: | ||
26 } | 26 } | ||
27 printf("Everything is done!\n"); | 27 printf("Everything is done!\n"); | ||
- | 28 | + | 28 |
29 } | 29 } | ||
30 | 30 | ||
31 return 0; | 31 return 0; | ||
- | 32 } | + | 32 } |
</code> | </code> | ||