Как я могу увидеть объекты внутри кучи и стека в C # .Net - PullRequest
6 голосов
/ 25 сентября 2011

Можно ли увидеть содержимое стека и кучи после каждой строки выполнения. Я хочу видеть это, поскольку это даст ясное представление о распределении и освобождении памяти в .Net. С вашим

Если какой-либо документ или ссылка, которая очистит мои сомнения с вашим ответом, пожалуйста, поделитесь.

Ответы [ 2 ]

3 голосов
/ 25 сентября 2011

SOS или PssCor - хорошее место для старта, наряду со стороной WinDbg .

Как только вы разобрались с этим;прикрепите WinDbg к вашему процессу, загрузите расширение отладчика.Например:

.load C:\pathtoextensions\psscor4.dll

После этого вы можете выполнить команды !dumpheap или !dumpstack.

Вывод обеих этих команд очень сырой,!dumpheap -stat даст вам «статистический» обзор вашей кучи.Тип, выделенное число и общее количество байтов для всех распределений.

Это не очень простая задача.Если вы не использовали его раньше, потребуется некоторое время, чтобы получить достаточную практику.

То, что вы можете сделать, - это установить точку останова для метода, используя !bpmd, ииспользуйте команды, упомянутые выше, затем перейдите с помощью команды p и повторите команды.

Я уверен, что есть и другие коммерческие инструменты, такие как ANTS Profiler или dotTrace , которая может выполнить работу, но у меня нет большого опыта работы с любым из этих инструментов.

Как только вы начнете, вы можете задать (новые) более конкретные вопросы о SOSили Psscor.

3 голосов
/ 25 сентября 2011

Стек:

var stackInfo = new StackTrace();

Куча?Нет, вам нужно использовать профилировщик, отладчик или соответствующие API.Не простая задача.Если вы попробуете это и столкнетесь с трудностями, лучше задать более конкретный вопрос.

...