Changes between Version 2 and Version 3 of cypress/Programming/CodeDebugging


Ignore:
Timestamp:
Aug 19, 2015 9:21:31 PM (6 years ago)
Author:
fuji
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • cypress/Programming/CodeDebugging

    v2 v3  
    9292
    9393== GDB ==
    94 You can use '''GDB''' on CCS cluster. [[http://www.gnu.org/software/gdb/|GDB]]
     94[http://www.gnu.org/software/gdb/]
    9595
    9696To debug with '''GDB''', submit an interactive job. [[https://wiki.hpc.tulane.edu/trac/wiki/cypress/using#SubmittingInteractiveJobs|See here]]
     
    176176Quit anyway? (y or n) y
    177177}}}
     178
     179== valgrid ==
     180[http://valgrind.org/]
     181
     182''Valgrind'' tools can detect many memory management and threading bugs, and profile your programs in detail.
     183
     184
     185=== Detecting Invalid Access  ===
     186
     187{{{#!c
     188#include <stdio.h>
     189#include <stdlib.h>
     190#include <string.h>
     191
     192char * foo() {
     193  char a[200];
     194  strcpy(a, "hello world cup\n");
     195  return a;
     196}
     197
     198int main() {
     199  char * a = foo();
     200  char c = a[0];
     201  printf("a[0] = %c\n", c);
     202  printf("a = %s\n", a);
     203  return 0;
     204}
     205}}}
     206
     207Start an interactive session,
     208{{{#!bash
     209[fuji@cypress2 ~]$ idev -c 1 --gres=mic:0
     210Requesting 1 node(s)  task(s) to workshop queue of workshop partition
     2111 task(s)/node, 1 cpu(s)/task, mic:0 MIC device(s)/node
     212Time: 0 (hr) 60 (min).
     213Submitted batch job 52605
     214JOBID=52605 begin on cypress01-089
     215--> Creating interactive terminal session (login) on node cypress01-089.
     216--> You have 0 (hr) 60 (min).
     217Last login: Wed Aug 19 21:05:45 2015 from cypress2.cm.cluster
     218[fuji@cypress01-089 ~]$
     219}}}
     220compile and run,
     221{{{#!bash
     222[fuji@cypress01-089 ~]$ module load intel-psxe/2015-update1
     223[fuji@cypress01-089 ~]$ icc off_stack.c
     224off_stack.c(8): warning #1251: returning pointer to local variable
     225    return a;
     226           ^
     227
     228[fuji@cypress01-089 ~]$ ./a.out
     229a[0] = h
     230a = hello world cup
     231}}}
     232
     233{{{#!bash
     234[fuji@cypress01-089 ~]$ icc -O0 -g off_stack.c
     235off_stack.c(8): warning #1251: returning pointer to local variable
     236    return a;
     237           ^
     238
     239[fuji@cypress01-089 ~]$ valgrind ./a.out
     240==33367== Memcheck, a memory error detector
     241==33367== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
     242==33367== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
     243==33367== Command: ./a.out
     244==33367==
     245==33367== Invalid read of size 1
     246==33367==    at 0x4005C5: main (off_stack.c:13)
     247==33367==  Address 0x7feffdd50 is just below the stack ptr.  To suppress, use: --workaround-gcc296-bugs=yes
     248==33367==
     249a[0] = h
     250a =
     251==33367==
     252==33367== HEAP SUMMARY:
     253==33367==     in use at exit: 0 bytes in 0 blocks
     254==33367==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated
     255==33367==
     256==33367== All heap blocks were freed -- no leaks are possible
     257==33367==
     258==33367== For counts of detected and suppressed errors, rerun with: -v
     259==33367== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 6 from 6)
     260[fuji@cypress01-089 ~]$
     261}}}
     262
     263