Профилирование распределений .NET - PullRequest
1 голос
/ 23 апреля 2010

Мне нужен способ отследить все выделения в приложении .NET, которые происходят в течение одного шага в процессе отладки моего приложения.Я имею в виду, когда я нахожусь в отладчике, шагая по коду, я хотел бы за один шаг увидеть, какое распределение имело место.Есть ли инструмент или способ сделать это?Я пробовал несколько профилировщиков памяти, в том числе CLR-профилировщик, JetBrains и .NET Memory Profiler 3.5, и ни один из них, по-видимому, не обеспечивает такую ​​функциональность.

1 Ответ

0 голосов
/ 23 апреля 2010

Вы можете использовать WinDBG с чем-то вроде этого

.load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\SOS.dll
.logopen log.txt
bp mscorwks!FastAllocateObject "!DumpMT poi(@esp+4); g"
bp mscorwks!AllocateObject "!DumpMT poi(@esp+4); g"

Это должно нарушить все AllocateObject / FastAllocateObject и дамп MethodTable, передаваемый этим функциям в log.txt. Вероятно, он будет очень медленным, так как числовыделенные объекты увеличиваются

...