Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Valgrind:

...

It shows memory leaks, deallocation errors in the program

Installation:

...

By adding the below tool, we can install valgrind in RPI-target

Code Block
languagec#
themeDJango
IMAGE_INSTALL_APPEND += " valgrind" in the 

...

<image_recipe.

...

bbappend>



Code Block
languagec#
themeDJango
titleCommand

...

to

...

check memory leak
valgrind --tool=memcheck --leak-check=full --show-reachable=yes --num-callers=20 --track-fds=yes /usr/bin/

...

<component>

Defining the options:

Card
labelOptions

...

--tool=memcheck: "To the check the memory"
--leak-check=full: "each individual leak will be shown in detail"
  
--show-reachable=yes: "When enabled, the leak detector also shows "reachable" and "indirectly lost" blocks"
--num-callers=20: "Specifies the maximum number of entries shown in stack traces that identify program locations"
--track-fds=yes: "When enabled, Valgrind will print out a list of open file descriptors on exit."
/usr/bin/<component>: "Component's binary path"

...





Use

...

case:

Sample output of valgrind to reproduce leak for created memory leak
Code Block
languagec#
themeDJango
Input code: In ssp_main.c of CcspPandM

...


+int* bar()

...


+{        int *p12;

...


+         p12 = (int*)malloc(1024*1024* sizeof( int));

...


+         return p12;

...


+}

...


 

...


int main(int argc, char* argv[])

...


    { int s, svalue = -1;

...


     errno_t rc    = -1;

...


     int     ret   = 0;

...


+    bar(); //536 line in the valgrind output[by 0x40354B: main (ssp_main.c:536)]

...


}   

...


Command : 

...

root@RaspberryPi-Gateway:/usr/

...

bin# valgrind --leak-check=full ./CcspPandMSsp

...

...



 Output of valgrind:

...


==7627== 4,194,304 bytes in 1 blocks are possibly lost in loss record 96 of 97

...


==7627==

...

 

...

at 0x48461E0: malloc (vg_replace_malloc.c:309)

...


==7627==

...

 by 0x40354B: main (ssp_main.c:536)

...


==7627== 

...


==7627== 4,194,304 bytes in 1 blocks are possibly lost in loss record 97 of 97

...


==7627==

...

 at 0x48461E0: malloc (vg_replace_malloc.c:309)

...


==7627==

...

 by 0x4035A7: main (ssp_main.c:567)

...


==7627== 

...


==7627== LEAK SUMMARY:

...


==7627==

...

 definitely lost: 683 bytes in 1 blocks

...


==7627==

...

 

...

indirectly lost: 0 bytes in 0 blocks

...


==7627==

...

 possibly lost: 8,388,608 bytes in 2 blocks

...


==7627==

...

 

...

still reachable: 68,647 bytes in 1,341 blocks

...


==7627==

...

 suppressed: 0 bytes in 0 blocks

...


==7627== Reachable blocks (those to which a pointer was found) are not shown.

...


==7627== To see them, rerun with: --leak-check=full --show-leak-kinds=all

...


==7627== 

...


==7627== For lists of detected and suppressed errors, rerun with: -s

...


==7627== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)