Запуск профилировщика кода на устройстве Windows Mobile

Я пытаюсь написать COM-сервер, использующий API профилирования .NET. Этот COM-сервер будет работать на устройствах Windows Mobile 6. Целью этого COM-сервера является профилирование приложений .NET, работающих на одном устройстве. Однако я не могу найти следующие файлы заголовков в Windows Mobile SDK:

  1. cor.h
  2. corprof.h

Означает ли это, что мне нужно перенести эти файлы заголовков, используя соответствующие версии, доступные в Windows (Desktop) SDK?

Именно эти файлы заголовков определяют семейство интерфейсов ICorProfilerCallBack, которые так важны для использования .NET Profiling API.

Я ознакомился с этими заголовочными файлами, присутствующими в Windows SDK, и обнаружил, что они содержат много специфической для платформы информации, связанной с объектной моделью .NET framework, а также формат PE-файла, представляющего сборку .NET. . Похоже, что для успешного переноса мне необходимо доскональное знание деталей реализации в этих областях .NET. Есть ли альтернативы?


person ghd    schedule 18.02.2013    source источник


Ответы (1)


Проблема, с которой вы столкнулись, заключается в том, что вы изначально сделали неверное предположение, что Compact Framework поддерживает любой из ICorProfilerCallBack интерфейсов. Это не. Если вы хотите выполнить профилирование, другие профилировщики, которые я видел / использовал в прошлом, использовали несколько путей:

  1. Используйте отражение, чтобы перестроить и инструментировать сборки CF на рабочем столе. Используя вашу собственную проприетарную парадигму публикации, вы можете отправлять сообщения о входе / выходе функций и тому подобное. Это полезно для профилирования кода, но не только для профилирования памяти.
  2. Создайте Mono.Cecil для CF и используйте его для инструментирования / излучения прямо на целевом устройстве. Это медленнее, но портативнее.
  3. Используйте полностью недокументированные API-интерфейсы профилирования памяти в CF, например CF CLR Profiler использует. Я искал какие-либо документы по ним, но ничего не вышло, и я пытался подтолкнуть Microsoft к открытию исходного кода инструмента на Codeplex, но я не добился никакого прогресса ни в одном из них, так что это было бы много обратной инженерии. сетевых пакетов с помощью существующего инструмента и Wireshark.
person ctacke    schedule 19.02.2013
comment
Если в пункте № 3 вы ссылаетесь на профилировщик CLR на CodePlex, я не Не думаю, что он поддерживает Compact Framework. - person ghd; 20.02.2013
comment
Что касается пункта 1, не будет ли это включать в себя проверку сборки (той, которую я хочу профилировать), вставку сообщений о входе / выходе функции в соответствующие места, пересчет контрольной суммы затронутых модулей и изменение поля контрольной суммы в соответствующих таблицах метаданных ? И похоже, что Mono.Cecil выполняет всю эту работу. Я прав? - person ghd; 20.02.2013
comment
Что касается №3, нет, я имею в виду профилировщик, поставляемый с Compact Framework. Отредактировал по ссылке. - person ctacke; 20.02.2013