Hyppää sisältöön

Significant changes to Puhti & Mahti authentication coming in April! Read about the SSH key and multi-factor authentication requirements.

Virheenkorjaus

Valmistele koodi virheenkorjausta varten

Jotta saadaan kaikki virheenkorjaustiedot, ohjelma täytyy yleensä kääntää uudelleen virheenkorjauslipun (-g) kanssa aktivoituna. Esimerkiksi GNU-kääntäjällä:

gcc -g -o example example.c

Muistivuodot

Hyvä paikka aloittaa, on tarkistaa muistivuodot Valgrindilla. Se on monipuolinen työkalu, jota käytetään yleisimmin koodin muistivuotojen havaitsemiseen, mutta sitä voidaan käyttää myös esim. säikeitysvirheiden tai kasan ja välimuistin käytön tutkimiseen.

Jotta voit käyttää Valgrindia, aseta ympäristö tarvittavaksi koodillesi normaalisti ja käännä koodi uudelleen virheenkorjauslipun (-g) lisättynä.

Valgrind-analyysin suorittaminen on yksinkertaista ja sen voi tehdä joko interaktiivisessa istunnossa tai lähetettynä työnä. Interaktiivisessa istunnossa käytettävä komento on valgrind ./myprogram, kun taas lähetetyssä työssä komento on srun valgrind ./myprogram.

Esimerkiksi, tarkistaaksesi muistivuodot interaktiivisessa istunnossa:

module load valgrind

valgrind ./example

Jotta saman analyysin voi suorittaa normaalina ei-interaktiivisena työnä, esim. debuggattaessa rinnakkaisohjelmaa, käytettävä komento on srun valgrind ./example.

Debuggerit

Täysimittaisia debuggaustyökaluja tarvitaan usein koodin suorittamisen tarkkaan tutkimiseen ja suoritusajan virheiden ratkaisemiseen. CSC:llä on saatavilla useita debuggaustyökaluja:

  • Arm DDT on debuggertyökalu sarjallisia ja rinnakkaisohjelmia (MPI, OpenMP, CUDA) varten ja siinä on sekä graafinen että komentoriviliittymä
  • GDB on komentorividebuggertyökalu käännetyille ohjelmille (C, C++, Fortran, jne.)
  • PDB on interaktiivinen debuggertyökalu Python-ohjelmille
  • CUDA-GDB on komentorividebuggertyökalu CUDA-ohjelmille
  • compute-sanitizer on komentorivitoiminnallisuuden tarkistustyökalupaketti