This shows you the differences between two versions of the page.
|
pclp2:laboratoare:laborator-02 [2023/04/06 14:47] 127.0.0.1 external edit |
pclp2:laboratoare:laborator-02 [2024/02/08 19:53] (current) dragos.niculescu [9. Configurare vscode cu gdb] |
||
|---|---|---|---|
| Line 525: | Line 525: | ||
| </code> | </code> | ||
| + | |||
| + | ==== 9. Configurare vscode cu gdb ==== | ||
| + | |||
| + | === Configurare === | ||
| + | - extensii de instalat: Makefile tools, x86 and x86_64 Assembly, GDB Debug (by DamianKoper) | ||
| + | - Terminal/Configure Default Build Task - se editează .vscode/tasks.json, la commandă se trece ''make all'' | ||
| + | <code json> | ||
| + | "command": "make", | ||
| + | "args": [ | ||
| + | "all", | ||
| + | "" | ||
| + | ], | ||
| + | "options": { | ||
| + | "cwd": "${fileDirname}" | ||
| + | }, | ||
| + | "group": { | ||
| + | "kind": "build", | ||
| + | "isDefault": true | ||
| + | }, | ||
| + | </code> | ||
| + | - la tastele Ctrl-Shift-B se lansează comanda make all, îar în terminal se poate da Ctrl-Click pe numele fișierului cu eroare | ||
| + | - Fie se tastează F5 pentru a demara debug, fie se editează direct .vscode/launch.json; trebuie să conțină | ||
| + | <code json> | ||
| + | "stopAtEntry": true, | ||
| + | "cwd": "/tmp/01-hello-world", | ||
| + | "program": "/tmp/01-hello-world/hello", | ||
| + | "miDebuggerPath": "gdb", | ||
| + | "args": ["<", "1.in"], //Dacă la debug vrem stdin dintr-un fișier 1.in | ||
| + | </code> | ||
| + | - la comanda F5, debuggerul trebuie să pornească și să se oprească pe prima instrucțiune; cu Ctrl-Shift-D activăm fereastra de debug | ||
| + | - dacă avem module C, în acele module la buton dreapta apare opțiunea 'Disasembly window' | ||
| + | |||
| + | === Operare === | ||
| + | * Se pot pune breakpointuri cu click dreapta în coloana din stânga numărului de line | ||
| + | * în debug window (Ctrl-Shift-D), se recomandă activarea VAriables, Watch, și Call Stack | ||
| + | * Variables/Locals - apar variabilele din funcțiile C | ||
| + | * Variables/Rergisters/CPU - registrele pe 32 biți | ||
| + | * Watch/+ se adaugă ''`print $eflags'' pentru a vedea flagurile actualizate | ||
| + | * În modul debug, cu click dreapta în sursă, se poate deschide 'Open disassembly view' | ||
| + | * În disasembly mode se pot pune breakpointuri în coloana din stânga adreselor; F10, F11 și Shift-F11 merg | ||
| + | * În fereastra Terminal apar stdio+stdin ale progamului | ||
| + | * În fereastra Debug Console apare promptul gdb; toate comenzile trebuie precedate de backquote ''`'' | ||
| + | |||
| + | === Hot Keys === | ||
| + | * Ctrl-Shift-D debug window | ||
| + | * F5 start debugging, și continuă | ||
| + | * F10 step over - execută toată funcția | ||
| + | * F11 step into - intră în funcții | ||
| + | * Shift-F11 step out - iese din apelul curent | ||
| + | * | ||
| + | | ||
| ===== Soluții ===== | ===== Soluții ===== | ||
| Soluțiile pentru exerciții sunt disponibile [[https://elf.cs.pub.ro/asm/res/laboratoare/lab-02-sol.zip|aici]]. | Soluțiile pentru exerciții sunt disponibile [[https://elf.cs.pub.ro/asm/res/laboratoare/lab-02-sol.zip|aici]]. | ||