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.

1. Az eszközökről

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:

2. JetBrains licensz igénylés

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.

3. CLion telepítése

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.