Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pa:halite-debugging [2022/03/13 21:59]
radu.iacob
pa:halite-debugging [2022/03/14 11:48] (current)
radu.iacob
Line 1: Line 1:
 ====== Debugging in C++ folosind CLion si GDB ====== ====== Debugging in C++ folosind CLion si GDB ======
  
-!!! Cititi tot inainte de a va apuca sa testati !!! +  - Instanțiati un proiect nou cu sursele voastre și executabilul engine-ului (halite).
   - In fisierul "​MyBot.cpp"​ sau unde este functia main, introducem urmatoarele linii:   - In fisierul "​MyBot.cpp"​ sau unde este functia main, introducem urmatoarele linii:
-  ​* #include <​zconf.h>​ +    ​//#include <​zconf.h>​// 
-  * inaintea functiei main: volatile int ready = 0; +    * inaintea functiei main: //volatile int ready = 0;// 
-  * la inceputul functiei main: while (!ready) sleep(1);+    * la inceputul functiei main: //while (!ready) sleep(1);// 
 +  - In "​CMakeLists.txt"​ ne asiguram ca vom compila cu -g in configuratia de Debug (si cu optimizari cand nu facem debug) 
 +    * [[https://​gist.github.com/​johnthebrave/​a14a109cfef9643ac48f2613aa97717c|Exemplu pentru starter-kit]] 
 +    * Putem adăuga un flag auxiliar (in exemplul de CMake l-am numit GDB_DEBUG) care va activa porțiunea adaugată mai sus doar când facem debug. 
 +    * [[https://​gist.github.com/​johnthebrave/​3c5d39885a9598b5bf59695700ea081d|Exemplu MyBot.cpp]] 
 +  - Facem o noua configurație de rulare in CLion. 
 +    * **Run -> Edit Configurations** 
 +    * Apăsam pe **+**, apoi selectam **Application** 
 +    * Punem ce nume vrem (eg. **Debug**), la target lasam cum e (eg. **MyBot**), la executable selectam **halite** (executabilul engine-ului). 
 +    * La **Program arguments** puteti pune ce ați pune daca ați executa ./halite din terminal (dimensiunea hartii, seed, botii rulati etc.).  
 +      * Neapărat să puneți flag-ul -t (pentru ca engine-ul să ignore timeout-ul)  
 +      * Botul vostru va avea calea cmake-build-debug/​MyBot (sau în loc de MyBot ce nume are executabilul vostru în urma compilării). 
 +      * Exemplu: //-d "30 30" ./​cmake-build-debug/​MyBot ./​cmake-build-debug/​RandomBot -t// 
 +  - O dată facută configurația,​ rulați și ar trebui să apară în terminalul din CLion că se pornește meciul, dar se blochează la inițializarea jucătorilor. Acum dati Ctrl+Alt+5 sau **Run -> Attach to Local Process** și căutați MyBot (sau numele executabilului botului vostru). 
 +    - Dacă dă fail atașarea la proces, rulați comanda următoare într-un terminal //echo 0 | sudo tee /​proc/​sys/​kernel/​yama/​ptrace_scope//​. Mai multe detalii găsiți [[https://​www.jetbrains.com/​help/​clion/​attaching-to-local-process.html|aici]].
  
-  - In "​CMakeLists.txt"​ ne asiguram ca linia cu flag-uri de compilare nu contine ​si flag-ul -O2dar contine flag-ul -g. Linia cu flag-uri de compilare ​ar trebui ​sa inceapa cu #set(CMAKE_CXX_FLAGS "​${CMAKE_CXX_FLAGS} ​-g -O2 -Wall ...+Acum ar trebui să apară în partea de jos un panou de debug cu 4 tab-uri (Frames, Variables, Console ​si GDB)iar in stânga acestui panou ar trebui ​să vedeți niște iconițe ca la un player video, dați pe cea de pauză ​(linii verticale) și apoi în tab-ul GDB executați comanda //set ready = 1//
  
-  - Copiem executabilul obtinut in urma compilarii engine-ului (probabil se numeste halite) in directorul proiectuluidaca nu este deja. +  - Acum înainte să dați din nou play din debuggerpuneti un breakpoint unde vreți ​in cod, și dacă se ajunge acolo programul ar trebui să se oprească în punctul respectiv.
-  - Facem o noua configuratie de rulare ​in CLion.+
  
-  * Run -> Edit Configurations.... 
-  * Apasam pe +, apoi selectam Application 
-  * Punem ce nume vrem (ex: debug), la target lasam cum e (probabil MyBot), la executable selectam halite (executabilul engine-ului). 
-  * La Program arguments puteti pune ce ati pune daca ati executa ./halite din terminal (dimensiunea hartii, seed, botii rulati etc.). Neaparat sa puneti flag-ul --no-timeout,​ iar botul vostru va avea calea cmake-build-debug/​MyBot (sau in loc de MyBot ce nume are executabilul vostru in urma compilarii). 
- 
-  - O data facuta configuratia,​ rulati si ar trebui sa apara in terminalul din CLion ca se porneste meciul, dar se blocheaza la initializarea jucatorilor. Acum dati Ctrl+Shift+X sau Run -> Attach to Local Process... si cautati MyBot (sau numele executabilului botului vostru). 
-  - (Optional) Daca da fail atasarea la proces, rulati comanda urmatoare intr-un terminal echo 0 | sudo tee /​proc/​sys/​kernel/​yama/​ptrace_scope. Vedeti aici ce trebuie facut daca nu vreti sa rulati comanda dupa fiecare restart al sistemului. 
-Acum ar trebui sa apara in partea de jos un panou de debug cu 4 tab-uri (Frames, Variables, Console si GDB), iar in stanga acestui panou ar trebui sa vedeti niste iconite ca la un player video, dati pe cea de pauza (linii verticale) si apoi in tab-ul GDB executati comanda set ready = 1 
- 
-  - Acum inainte sa dati din nou play din debugger, puneti un breakpoint unde vreti in cod, si daca se ajunge acolo, programul ar trebui sa se opreasca in punctul acela. 
- 
- 
-**NU UITATI SA ELIMINATI LINIILE DE LA PUNCTUL 1 INAINTE DE A DA PUSH VARIANTEI FINALE** 
- 
-Recomandari:​ 
  
 +**Recomandări**:​
 +  * **Asigurați-vă că porțiunea de cod de la linia 1 nu este activă în varianta finală.**
   * Rulati un singur bot in modul debug (cu liniile mentionate la punctul 1) pentru ca altfel trebuie sa dati attach la fiecare proces ca sa setati ready = 1   * Rulati un singur bot in modul debug (cu liniile mentionate la punctul 1) pentru ca altfel trebuie sa dati attach la fiecare proces ca sa setati ready = 1
- +  ​Puteți ​seta conditii pentru breakpoint, astfel ca programul sa se oprească ​doar cand anumite variabile din cod au valorile potrivite (de exemplu sa se opreasca la un breakpoint doar dupa tura 200 a jocului) 
-  ​Puteti ​seta conditii pentru breakpoint, astfel ca programul sa se opreasca ​doar cand anumite variabile din cod au valorile potrivite (de exemplu sa se opreasca la un breakpoint doar dupa tura 200 a jocului) +  * Daca vă puteți atașa ​la proces, dar breakpoint-uri ce sigur ar trebui ​să fie atinse, nu sunt atinse, sau programul pare că se oprește ​la altă linie, probabil ​ați uitat să scoateți ​-O2 sau să adaugați ​-g la flag-urile de compilare.
-  * Daca va puteti atasa la proces, dar breakpoint-uri ce sigur ar trebui ​sa fie atinse, nu sunt atinse, sau programul pare ca se opreste ​la alta linie, probabil ​ati uitat sa scoateti ​-O2 sau sa adaugati ​-g la flag-urile de compilare.+
  
pa/halite-debugging.1647201580.txt.gz · Last modified: 2022/03/13 21:59 by radu.iacob
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0