Windows 10 + Valgrind
Bogár Bálint · 2023.08.24.
A valgrind memóriakezelés-nyomkövető telepítése Windows 10-re, CLion mellé.
A Valgrind keretrendszerrel egy program memóriakezelési hibái kereshetőek meg. A
telepítése és parancssori használata Linuxon nagyon egyszerű (csomagkezelőből telepíthető, aztán valgrind
./program
), a Windowson történő használat, és fejlesztőkörnyezetekhez kapcsolás sajnos körülményesebb.
A CLion a JetBrains nevű cég által fejlesztett IDE (Integrated Development Environment) C és C++ programozási nyelvekhez. Az IDE-k célja, hogy a szoftverfejlesztők munkáját támogassák különféle eszközökkel. A CLion szerkesztője úgynevezett „on-the-fly code analysis”-t használ, ami annyit takar, hogy a fejlesztőkörnyezet a beírt kódot azonnal elemzi, jelzi a szintaktikai hibákat és számos potenciális szemantikai hibát is (pl. inicializálatlan változó, végtelen ciklus, összehasonlítás helyett értékadás logikai feltételben). A JetBrains a legtöbb fejlesztőkörnyezetéhez, így a CLion-höz is ingyenes hozzáférést biztosít az egyetemi hallgatóknak és oktatóknak.
A Valgrind egy ingyenes, memóriakezelési hibákat felderítő eszköz. 2017 óta a CLion támogatja a Valgrind használatát: közvetlenül a fejlesztőkörnyezetből, jól érthető, grafikus formában böngészhetjük a Valgrind vizsgálatának eredményeit. Míg a debugmalloc és memtrace könyvtárak jellemzően csak a szivárgó memória foglalásának sorát jelzik, itt végigkövethető, hogy milyen függvényhívások során jutott el a program a problémás foglaláshoz.
Tapasztalatok alapján az említett eszközök használata megkönnyíti és jelentősen felgyorsítja a hibakeresést, akkor amikor arra a leginkább szükség van: a progházik beadásának napján (természetesen jóval a határidő előtt, a házi készítése során is rengeteg idő spórolható).
Van azonban egy apró bökkenő: a Valgrind Linux-ra készült és csak azon fut, így a Windows rendszerünkön futó CLion hiába tudja nagyon profin megjeleníteni a Valgrind futásának eredményét, a Valgrind-nek nincs futási eredménye, hisz Windows-on nem fut. Emiatt a telepítés egy bizonyos pontján feketemágiát kell alkalmaznunk, ami körülményessé és időigényessé teszi a telepítést, de cserébe a használat valóban egy kattintásos lesz.
Windowson a CLion-Valgrind összehangoláshoz az alábbi rendszerkövetelményeknek kell teljesülnie:
- 64 bites Windows 10 rendszer
- Windows 10 verzió legalább 1607 (Anniversary update)
- NEM lehet Windows 10 S (https://support.microsoft.com/hu-hu/help/4020089/windows-10-in-s-mode-faq)
Az alábbi oldalon igényelhető az ingyenes licensz: https://www.jetbrains.com/shop/eform/students.
Az igényléshez be kell bizonyítanunk a JetBrains-nek, hogy valóban kapcsolatban állunk az egyetemmel, ennek legegyszerűbb módja, ha van .bme.hu-ra végződő e-mail címünk, ahova megerősítő e-mailt tudnak küldeni. Ilyet többféle módon is szerezhetünk:
- @edu.bme.hu
- https://login.bme.hu/ címtárral belépve „Felhasználónév beállítása az oktatási Office 365-höz (edu.bme.hu)”.
- https://www.office.com/ oldalon belépés után az Outlook-ot megnyitva férünk hozzá a postafiókhoz.
- Hátrányok: a felhasználónév igénylésének átfutási ideje van (manuálisan ellenőrzik).
- @sch.bme.hu
- https://webmail.sch.bme.hu/ oldalon SCH account-al belépve férünk hozzá a postafiókhoz.
A CLion az alábbi oldalról tölthető le: https://www.jetbrains.com/clion/download/#section=windows. A telepítés alapvetően Next, Next, Finish jellegű.
A feketemágia
A varázslat, amit alkalmazni fogunk WSL (Windows Subsystem for Linux, https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux) névre hallgat.
Első lépésben aktiválni kell a WSL feature-t a Windows rendszeren.
- Nyissunk egy rendszergazdai módban futó PowerShell-t:
- Start menü megnyitása után beírjuk, hogy PowerShell
- Jobb klikk → Futtatás rendszergazdaként/Run as Administrator
- Adjuk ki az alábbi parancsot (a konzolba jobb egérgombbal kattintva illeszthetünk be Ctrl+V helyett):
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
- Indítsuk újra a számítógépet!
Linux telepítése
A WSL bekapcsolása után tetszőleges Linux disztribúció telepíthető, esetünkben ez egy Ubuntu lesz.
- Nyissuk meg a Microsoft Store alkalmazást, a keresőbe írjuk be, hogy Ubuntu. A találatok közül válasszuk ki az Ubuntu 18.04 LTS-t és telepítsük.
- Ezután a Start menüben megjelenik az Ubuntu 18.04 LTS alkalmazás, indítsuk el.
- Egy kis idő után felhasználónevet és jelszót állíthatunk be, ezekre a továbbiakban a segédlet [user], [password] módon hivatkozik.
Megjegyzés: A jelszó beállításánál úgy tűnhet, mintha nem írnánk semmit a konzolba, a Linux így rejti el a jelszót csillagozás helyett.
A szükséges programok telepítése Linux-ra
A rendszergazda módban futtatni kívánt parancsokat sudo-val kezdjük, ha a parancs beírása után az Ubuntu jelszót kér az előbb beállítottat adjuk meg.
- Adjuk ki a következő parancsot: sudo apt update
- Telepítsük a fordítóprogramokat és a Valgrind-et az alább parancs kiadásával: sudo apt-get install cmake gcc clang gdb build-essential valgrind
A telepítés végeztével a Linux rendszerünkön elérhető az összes szükséges fordítóprogram és a Valgrind, ezek később az Ubuntu-t megnyitva bármikor rendelkezésünkre állnak, de a célunk, hogy ezeket a Windows-on futó CLion is lássa és használja.
Külső hozzáférés a Linux-hoz
Ahhoz, hogy a CLion csatlakozni tudjon a friss, ropogós Linux rendszerünkhöz, mely el van látva minden földi jóval, az Ubuntu rendszerünket ki kell nyissuk SSH2-ra.
Ez szerencsére nem egy bonyolult feladat, mivel a JetBrains készített egy shell script-et: https://github.com/JetBrains/clion-wsl/blob/master/ubuntu_setup_env.sh, mely gyakorlatilag mindent megcsinál helyettünk.
Adjuk ki az alábbi parancsot:
wget https://raw.githubusercontent.com/JetBrains/clion-wsl/master/ubuntu_setup_env.sh && bash ubuntu_setup_env.sh
Sikeres lefutás esetén a rendszerünk elérhető kívülről is, ez a következőképp ellenőrizhető:
ssh [username]@localhost -p2222
Ha minden jól ment, a Linux jelszavunk megadása után az alábbihoz hasonló kezdetű üzenet érkezik:

Ezután az Ubuntu bezárható, a továbbiakban nem lesz rá szükségünk.
CLion beállítása
A CLion első indításakor aktiválhatjuk az igényelt licence-szel, kiválaszthatjuk a témát, valamint a szükséges plugin-okat (az alapértelmezett plugin-ok elegek).
A fordító beállítását az alábbi ablakban kell megtegyük (ha ezt első indításkor bezártuk, File → Settings → Build, Execution, Deployment → Toolchains):

Válasszuk ki a WSL-t, ekkor az alábbi ablak kell fogadjon, jelezve, hogy az Ubuntu-t megtalálta, de semmi mást nem:

Kattintsunk a Credentials melletti fogaskerékre:

A + gombra kattintás után megadhatjuk az SSL kapcsolódási adatokat, felhasználónévnek és jelszónak a Linux-os adatokat adjuk meg, a többi beállítás a fenti képen látható. Apply után az SSH Configurations ablakot bezárva a Toolchain adatai némi gondolkozás után kizöldülnek:

Ekkor a CLion képes build-elni és futtatni a projekteket, de a Valgrind-ot még külön meg kell mondjuk neki, hogy hol találja. Ehhez a File → Settings → Build, Execution, Deployment → Dynamic Analysis Tools → Valgrind beállításnál a Valgrind executable mezőbe írjuk be a következőt: /usr/bin/valgrind

Apply és készen vagyunk!
Használat
Programjainkat így háromféleképpen futtathatjuk, a képernyő jobb felső sarkában található gombokkal
Lefordítja és lefuttatja a programot
Fordít és futtat debuggerrel (töréspontoknál megáll)
Fordít és futtat Valgrinddel
Utóbbi lehetőséget választva a képernyő alsó részén a Console mellett megjelenik egy Valgrind fül, mely memóriakezelési hiba esetén sárgán villog:

A fület megnyitva kilistázásra kerül az összes felfedett memóriakezelési hiba. Az alábbi példában a main-ből hívtam a rossz_fuggveny()-t, melynek feladata lett volna a foglalo_fuggveny()-ben foglalt memóriát dolga végeztével felszabadítani.
