Вопрос по reflection, iteration, c# – Техника для перебора переменных и поиска экземпляров определенного типа

8

я хочу перебирать переменные в памяти в моем процессе (динамически загружаемый через плагин) и искать экземпляры определенного типа.

Ранее я мог найти конкретные типы (или все типы в памяти). Я могу создавать экземпляры типов, я мог бы получать экземпляры, которые содержались в виде полей другого типа, но я все равно не знаю, просто "искать" для экземпляров определенного типа.

сейчас я делаю это только для обнаружения, так что я могу подключить отладчик, но в основном я хочу получить ссылку на них все, чтобы я мог вызывать методы для них. klumsy
Это опасно (но возможно). Вам необходимо привести указатель на управляемый объект обратно к ссылке на объект. Но имейте в виду, что вы можете получить случайные исключения ExecutionEngineExceptions, потому что если за это время GC действительно запустил, указатели объектов были изменены. Alois Kraus
Как показывают ответы, вам необходимо подключить отладчик к вашему приложению. Если это не вариант, вам нужно немного проработать проблему, чтобы дать вам, возможно, более простое решение (например, требуется, чтобы объекты регистрировались в центральной коллекции, ...) Alois Kraus
Вы можете автоматизировать Windbg, проанализировав вывод команды! DumpHeap, а затем приведя указатели к управляемым типам в вашем приложении. Alois Kraus
Если присоединение к процессу не является опцией, методы windbg / sos также отработают дамп памяти процесса. Просто убедитесь, что вы правильно поняли архитектуруblogs.msdn.com/b/tess/archive/2010/09/29/… Kenneth Ito

Ваш Ответ

1   ответ
2

Одним из способов было бы использовать windbg и sos. Вы можете! Dumpheap с флагом -type.

Эта статья, хотя и предназначена для поиска утечек, демонстрирует все команды sos, которые вам понадобятся. Автор использует CDB. Вы можете использовать либо cdb, либо windbg, это не имеет значения, пока вы загружаете sos.simple-talk.com/dotnet/.net-framework/…

Похожие вопросы