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]]. |