<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<div>
<div id="x_compose-container" itemscope="" itemtype="https://schema.org/EmailMessage" style="direction:ltr">
<span itemprop="creator" itemscope="" itemtype="https://schema.org/Organization"><span itemprop="name"></span></span>
<div>
<div style="direction:ltr">Great, thank you for the advice!</div>
<div><br>
</div>
<div style="direction:ltr">Best regards,</div>
<div style="direction:ltr">Yuyun</div>
<div><br>
</div>
<div class="x_acompli_signature">Get <a href="https://aka.ms/o0ukef">Outlook for iOS</a></div>
</div>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Smith, Barry F. <bsmith@mcs.anl.gov><br>
<b>Sent:</b> Tuesday, April 16, 2019 5:54:15 AM<br>
<b>To:</b> Yuyun Yang<br>
<b>Cc:</b> petsc-users@mcs.anl.gov<br>
<b>Subject:</b> Re: [petsc-users] Using -malloc_dump to examine memory leak</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:11pt;">
<div class="PlainText"><br>
  Please try the flag -options_dump this tries to give a much more concise view of what objects have not been freed. For example I commented<br>
out the last VecDestroy() in src/snes/examples/tutorials/ex19.c and then obtained:<br>
<br>
./ex19 -objects_dump<br>
lid velocity = 0.0625, prandtl # = 1., grashof # = 1.<br>
Number of SNES iterations = 2<br>
The following objects were never freed<br>
-----------------------------------------<br>
[0] DM da DM_0x84000000_0<br>
      [0]  DMDACreate2d() in /Users/barrysmith/Src/petsc/src/dm/impls/da/da2.c<br>
      [0]  main() in /Users/barrysmith/Src/petsc/src/snes/examples/tutorials/ex19.c<br>
[0] Vec seq Vec_0x84000000_6<br>
      [0]  DMCreateGlobalVector() in /Users/barrysmith/Src/petsc/src/dm/interface/dm.c<br>
      [0]  main() in /Users/barrysmith/Src/petsc/src/snes/examples/tutorials/ex19.c<br>
<br>
Now I just need to look at the calls to DMCreateGlobalVector and DMDACreate2d in main to see what I did not free.
<br>
<br>
Note that since PETSc objects may hold references to other PETSc objects some items may not be freed for which you DID call destroy on.<br>
For example because the unfreed vector holds a reference to the DM the DM is listed as not freed. Once you properly destroy the vector you'll
<br>
not that the DM is no longer listed as non freed.<br>
<br>
It can be a little overwhelming at first to figure out what objects have not been freed. We recommending setting the environmental variable<br>
export PETSC_OPTIONS=-malloc_test so that every run of your code reports memory issues and you can keep them under control from<br>
the beginning (when the code is small and growing) rather than wait until the code is large and there are many unfreed objects to chase down.<br>
<br>
   Good luck<br>
<br>
<br>
<br>
   Barry<br>
<br>
<br>
> On Apr 16, 2019, at 1:14 AM, Yuyun Yang via petsc-users <petsc-users@mcs.anl.gov> wrote:<br>
> <br>
> Hello team,<br>
>  <br>
> I’m trying to use the options -malloc_dump and -malloc_debug to examine memory leaks. The messages however, are quite generic, and don’t really tell me where the problems occur, for example:<br>
>  <br>
> [ 0]1520 bytes VecCreate() line 35 in /home/yyy910805/petsc/src/vec/vec/interface/veccreate.c<br>
>       [0]  PetscMallocA() line 35 in /home/yyy910805/petsc/src/sys/memory/mal.c<br>
>       [0]  VecCreate() line 30 in /home/yyy910805/petsc/src/vec/vec/interface/veccreate.c<br>
>       [0]  VecDuplicate_Seq() line 804 in /home/yyy910805/petsc/src/vec/vec/impls/seq/bvec2.c<br>
>       [0]  VecDuplicate() line 375 in /home/yyy910805/petsc/src/vec/vec/interface/vector.c<br>
>  <br>
> The code is huge, so going through every single VecCreate/VecDuplicate and VecDestroy is going to be time-consuming. Meanwhile, running valgrind gave me some uninitialized values errors that don’t seem to be related to the above message (or maybe they are?).<br>
>  <br>
> How can I use this option to debug effectively?<br>
>  <br>
> Thanks a lot,<br>
> Yuyun<br>
<br>
</div>
</span></font>
</body>
</html>