Tracing allocations with "new" in dmd

FeepingCreature feepingcreature at gmail.com
Fri Nov 11 07:26:37 UTC 2022


On Friday, 19 June 2020 at 16:03:55 UTC, Tim wrote:
> On Friday, 19 June 2020 at 13:45:23 UTC, Andrei Alexandrescu 
> wrote:
>> dmd does most of its allcoation with new. I wonder what would 
>> be the easiest way to track how many instances of each type 
>> are created.
>>
>> There are over 3000 call sites, so ideally the changes to the 
>> source would be entirely automatic (e.g. with sed).
>>
>> Would be in your debt for any ideas. Thanks!
>
> You can also use heaptrack for tracing allocations under Linux. 
> It uses LD_PRELOAD to replace allocation functions with 
> wrappers.
>
> I have modified heaptrack to also track allocations on the D GC 
> heap: https://github.com/tim-dlang/heaptrack/tree/heaptrack-d
>
> When using it, the application has to be linked with druntime 
> dynamically. It also only works, when the application is 
> launched by heaptrack, and not, when heaptrack is attached 
> later. The modified heaptrack will only work with D 
> applications.
>
> dmd can be linked dynamically with phobos/druntime by passing 
> DFLAGS="-defaultlib=phobos2 -debuglib=phobos2" to build.d.
>
> For dmd you can call it like this:
> heaptrack dmd -lowmem test.d
>
> It will then generate a file like heaptrack.dmd.*.zst, which 
> can be analyzed with heaptrack --analyze.

Reply to bump. This is one of the best "secret weapons" in the D 
ecosystem. Just yesterday we used it to find the reason why a 
service was ballooning to 11GB.


More information about the Digitalmars-d mailing list