Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– [email protected] %...

26
Ivan Giro*o igiro*[email protected] Informa(on & Communica(on Technology Sec(on (ICTS) Interna(onal Centre for Theore(cal Physics (ICTP) Debugging & Profiling with Open Source SW Tools

Transcript of Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– [email protected] %...

Page 1: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Ivan  Giro*o  –  igiro*[email protected]  Informa(on  &    Communica(on  Technology  Sec(on  (ICTS)  

Interna(onal  Centre  for  Theore(cal  Physics  (ICTP)      

Debugging  &  Profiling  with  Open  Source  SW  Tools  

Page 2: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

What  is  Debugging  ?!    •  Iden(fying  the  cause  of  an  error  and  correc(ng  it    •  Once  you  have  iden(fied  defects,  you  need  to:    

–  find  and  understand  the  cause    –  remove  the  defect  from  your  code  

•  In  a  large  number  of  cases  bug  fixes  are  wrong:    –  they  remove  the  symptom,  but  not  the  cause    

•  Improve  produc(vity  by  geIng  it  right  the  first  (me    •  A  lot  of  programmers  don't  know  how  to  debug!    

–  Doesn't  add  func(onality  &  doesn't  improve  the  science  

•  Debugging  needs  prac(ce  and  experience:  –  understand  the  science  and  the  tools    

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   2  

Page 3: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Lot  of  (me  debugging.  We  did  learn  also  from  it,  but  I  have  the  feeling  we  could  have  learnt  more  things  about  Quantum  Espresso  if  we  hadn't  had  to  be  debugging  for  so  long  (some  of  the  bugs  we  had  were  due  to  our  lack  of  excellence  in  programming  skills  and  were  not  specific  to  QE  issues)    (Cit.  from  ICTP  Ac(vity  evalua(on)  

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   3  

Page 4: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Errors  are  Opportuni(es    •  Learn  from  the  program  you're  working  on:    

–  Errors  mean  you  didn't  understand  the  program.  If  you  knew  it  beNer,  it  wouldn't  have  an  error.  You  would  have  fixed  it  already    

•  Learn  about  the  kinds  of  mistakes  you  make:    –  If  you  wrote  the  program,  you  inserted  the  error    –  Once  you  find  a  mistake,  ask  yourself:    

•  Why  did  you  make  it?  •  How  could  you  have  found  it  more  quickly?    •  How  could  you  have  prevented  it?  •  Are  there  other  similar  mistakes  in  the  code?    

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   4  

Page 5: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

The  Nature  of  Bugs  •  Straigh\orward  bug  to  intercept  and  solve  •  The  program  crashes  unexpectedly  

–  the  problem  can  be  easily  reproduced  (lucky)  –  bug  whose  causes  are  too  complex  to  be  reliably  reproduced;  it  thus  defies  repair  

–  bug  disappears  when  debugging  a  problem  (compiling  with  -­‐g  or  adding  prints)  

•  The  produced  numbers  differ  from  what  we  expected    –   bug  generated  by  an  invalid  opera(ons  –   bug  disappears  when  debugging  a  problem  (compiling  with  -­‐g  or  adding  prints)  

 Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   5  

Page 6: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Main  Reasons  of  Debugging  •  Floa(ng  Point  Excep(ons  (FPE)  

– Overflow    –  Invalid  Number  – Division  by  Zero  

•  Out  of  bound  •  Segmenta(on  Fault  •  Not  expected  execu(on  flow  •  The  Program  Hangs  

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   6  

Page 7: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Purpose  of  a  Debugger    •  More  informa(on  than  print  statements    •  Allows  to  stop/start/single  step  execu(on    •  Look  at  data  and  modify  it  •  'Post  mortem'  analysis  from  core  dumps    •  Prove  /  disprove  hypotheses    •  No  subs(tute  for  good  thinking    •  But,  some(mes  good  thinking  is  not  a  subs(tute  for  effec(vely  using  a  debugger!    

•  Easier  to  use  with  modular  code    

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   7  

Page 8: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Approaches  •  Print  Messages  and  Variables  J  •  Compiler  Debug  Op(ons  •  Core  analysis  •  Run  the  Program  with  a  Debugger  •  ANach  Debugger  to  a  running  process  •  Ask  for  help!  

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   8  

Page 9: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Using  a  Debugger    •  When  compiling  use  -­‐g  op(on  to  include  debug  info  in  object  (.o)  and  executable  (and  possibly  -­‐O0)  

•  1:1  mapping  of  execu(on  and  source  code  only  when  op(miza(on  is  turned  off  –  problem  when  op(miza(on  uncovers  bug    

•  GNU  compilers  allow  -­‐g  with  op(miza(on    –  not  always  correct  line  numbers  –  variables/code  can  be  'op(mized  away’    –  progress  confusing  with  loop  unrolling    

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   9  

Page 10: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Using  gdb  as  a  Debugger  •  gdb  ex01-­‐c  launches  debugger,  loads  binary,  stops  with  

(gdb)  prompt  wai(ng  for  input:    •  run  starts  executable,  arguments  are  passed  Running  

program  can  be  interrupted  (ctrl-­‐c)    •  gdb  ./prog  -­‐-­‐args  arg1  -­‐flag  passes  all  arguments  to  the  run  

command  inside  gdb    •  conJnue  con(nues  stopped  program  •  finish  con(nues  un(l  the  end  of  a  subrou(ne    •  step  single  steps  through  program  line  by  line    •  next  single  steps  but  doesn't  step  into  subrou(nes    

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   10  

Page 11: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

More  Basic  gdb  Commands    •  print  displays  contents  of  a  known  data  object    •  display  is  like  print  but  shows  updates  every  step    •  where  shows  stack  trace  (of  func(on  calls)    •  up/down  allows  to  move  up/down  on  the  stack    •  break  sets  break  point  (uncondi(onal  stop),  loca(on  indicated  by  file  name+line  no.  or  func(on    

•  watch  sets  a  condi(onal  break  point  (breaks  when  an  expression  changes,  e.g.  a  variable)    

•  delete  removes  display  or  break  points    

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   11  

Page 12: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Post  Mortem  Analysis  •  Enable  core  dumps:  ulimit  -­‐c  unlimited    •  Run  executable  un(l  it  crashes;  will  generate  a  file  core  or  core.<pid>  with  memory  image    

•  Load  executable  and  core  dump  into  debugger  gdb  myexe  core.<pid>    

•  Inspect  loca(on  of  crash  through  commands:  where,  up,  down,  list  

•  Use  directory  to  point  to  loca(on  of  sources    

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   12  

Page 13: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Using  valgrind    •  Run  valgrind  -­‐v  ./exe  to  instrument  and  run    •  -­‐-­‐leak-­‐check=full  -­‐-­‐track-­‐origins=yes    •  Output  will  list  individual  errors  and  summary    •  With  debug  info  present  can  resolve  problems  to  line  of  code,  otherwise  to  name  of  func(on    

•  Also  monitors  memory  alloca(on  /  dealloca(on  to  flag  memory  leaks  (“forgoNen”  alloca(ons)    

•  Instrumenta(on  slows  down  execu(on  •  Can  produce  “false  posi(ves”  (flag  non-­‐errors)    

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   13  

Page 14: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

How  to  NOT  do  Debugging  •  Find  the  error  by  guessing    •  Change  things  randomly  un(l  it  works  (again)    •  Don't  keep  track  of  what  you  changed    •  Don't  make  a  backup  of  the  original    •  Fix  the  error  with  the  most  obvious  fix    •  If  wrong  code  gives  the  correct  result,  and  changing  it  doesn't  work,  don't  correct  it.    

•  If  the  error  is  gone,  the  problem  is  solved.  Trying  to  understand  the  problem,  is  a  waste  of  (me    

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   14  

Page 15: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Debugging  Tools    •  Source  code  comparison  and  management  tools:  diff,  

vimdiff,  emacs/ediff,  cvs/svn/git    –  Help  you  to  find  differences,  origins  of  changes    

•  Source  code  analysis  tools:  compiler  warnings,  wnchek,  lint    –  Help  you  to  find  problema(c  code  

•  Always  enable  warnings  when  programming    •  Always  take  warnings  seriously  (but  not  all)    •  Always  compile/test  on  mul(ple  pla\orms    

•  Bounds  checking  allows  checking  of  (sta(c)  memory  alloca(on  viola(ons  (no  malloc)    

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   15  

Page 16: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

More  Debugging  Tools  •  Using different compilers (Intel, GCC, Clang, ...) •  Debuggers  and  debugger  frontends:  gdb  (GNU  compilers),  idb  (Intel  compilers),  ddd  (GUI),  eclipse  (IDE),  and  many  more...    

•  gprof  (profiler)  as  it  can  generate  call  graphs    •  valgrind,  an  instrumenta(on  framework    

– Memcheck:  detects  memory  management  problems  –  Cachegrind:  cache  profiler,  detects  cache  misses    –  Callgrind:  call  graph  crea(on  tool    

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   16  

Page 17: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

How  to  Report  a  Bug(?)  to  Others  •  Research  whether  bug  is  known/fixed  

– web  search,  mailing  list  archive,  bugzilla    •  Provide  descrip(on  on  how  to  reproduce  the  problem.  Find  a  minimal  input  to  show  bug.    

•  Always  state  hardware/sowware  you  are  using  (distribu(on,  compilers,  code  version)    

•  Demonstrate,  that  you  have  invested  effort    •  Make  it  easy  for  others  to  help  you!    

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   17  

Page 18: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Profiling    •  Essen(al  opera(on  for  code  op(miza(on    •  Profiling  usually  means:    

–  Instrumenta(on  of  code  (e.g.  during  compila(on)  –  Automated  collec(on  of  (ming  data  during  execu(on    –  Analysis  of  collected  data,  breakdown  by  func(on    

•  Example:  gcc  -­‐o  some_exe.x  -­‐pg  some_code.c  –  ./some_exe.x    –  gprof  some_exe.x  gmon.out    

•  Profiling  is  owen  incompa(ble  with  code  op(miza(on  or  can  be  misleading  (inlining)      

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   18  

Page 19: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   19  

Page 20: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

PERF  –  Hardware  Assisted  Profiling    •  Modern  x86  CPUs  contain  performance  monitor  tools  included  in  their  hardware    

•  Linux  kernel  versions  support  this  feature  which  allows  for  very  low  overhead  profiling  without  instrumenta(on  of  binaries    

•  perf  stat  ./a.out  -­‐>  profile  summary    •  perf  record  ./a.out;  perf  report  -­‐i  perf.data    •  gprof  like  func(on  level  profiling  (with  coverage  report  and  disassembly,  if  debug  info  present)    

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   20  

Page 21: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   21  

Page 22: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Func(on  for  Internal  Profiling    #include <time.h> #include <ctype.h> #include <sys/types.h> #include <sys/time.h> double seconds() /* Returns elepsed seconds past from the last call to timer rest */ { struct timeval tmp; double sec; gettimeofday( &tmp, (struct timezone *)0 ); sec = tmp.tv_sec + ((double)tmp.tv_usec)/1000000.0; return sec; }

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   22  

Page 23: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   23  

Page 24: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Profiling  in  Python    •  individual  func(ons:    

–  import  cProfile    –  cProfile.run('some_func()',  'profile.tmp')    

•  whole  script:    –  python  -­‐m  cProfile  [-­‐o  output_file]  [-­‐s  sort_order]  myscript.py    

•  Analyze  profile  file:    –  import  pstats    –  p  =  pstats.Stats('profile.tmp')    –  p.strip_dirs().sort_stats(-­‐1).print_stats()    

•  More  info  at  hNp://docs.python.org/2/library/profile.html    

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   24  

Page 25: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

Debugging  Python    •  typically  very  easy  to  do  interac(vely  with  "print()"  and  "exit()"  statements  in  the  code    

•  More  featureful  debugger  available  in  module  "pdb",  see:  –  hNp://docs.python.org/2.7/library/pdb.html  

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   25  

Page 26: Debugging&Profilingwith% OpenSourceSWTools...Ivan Giroo %– igiroo@ictp.it % Informaon)&))Communicaon)Technology)Sec(on)(ICTS)) Internaonal)Centre)for)Theore(cal)Physics)(ICTP))))

References  •  PERF  wiki  

Ivan  GiroNo      [email protected]   Debugging  &  Profiling  with  Open  Source  SW  Tools   26