выход regsrv32 dllregisterserver - PullRequest
       14

выход regsrv32 dllregisterserver

0 голосов
/ 09 октября 2009

мы отправляем расширение оболочки DLL (зарегистрировано в regsvr32). Есть ли простой способ получить отладочный вывод из этой DLL из другого приложения (чтобы мы могли отправлять эти следы домой, когда что-то сломалось)?

есть идеи? Какой самый простой способ получить logdata из DLL в другой процесс?

Ответы [ 2 ]

1 голос
/ 09 октября 2009

Если это DLL расширения оболочки, то не запускается ли она как вошедший в систему пользователь и, следовательно, не может ли она записать в файл журнала какой-либо подходящий каталог на диске? Если да, то почему вы хотите, чтобы он записывал в другой процесс?

0 голосов
/ 09 октября 2009

Вы можете использовать Event Tracing для Windows (ETW) , чтобы отслеживать выполнение расширения DLL. У ETW практически нет накладных расходов, когда нет прослушивателя, поэтому в обычных условиях ваша DLL не будет подвергаться штрафу за перфорирование; в то же время он позволяет детализировать вывод на разных уровнях детализации.

ETW работает, когда вызываются API, они проверяют, есть ли подписчик, подписанный на трассировки от конкретного издателя, и, если нет, ничего не генерируется. Если имеется прослушиватель, только файлы, на которые подписан подписчик, записываются в файл с отображением в памяти. Таким образом, генерируется только столько данных трассировки, сколько запрошено.

Слушатели ETW могут быть активированы в любое время, и издатель не должен быть перезапущен. Кроме того, ETW не имеет привязки к вкусу и может использоваться как для отладки, так и для розничной торговли. Таким образом, если у вашего клиента есть проблема, вам нужно только отправить ему слушателя с инструкциями о том, как его запустить и собрать информацию; Вам не нужно отправлять им бинарную версию. Вы можете написать свое собственное приложение, которое действует как прослушиватель, или использовать стандартные инструменты tracelog.exe и tracefmt.exe , чтобы получить трассировки, записанные в файл. *

Чтобы сгенерировать необходимый код ETW в вашей DLL, вы можете использовать препроцессор WPP вместо непосредственного использования API-интерфейсов ETW.

Примечание : Хотя все ссылки, которые я публикую здесь, относятся к документации Windows Driver Kit, ETW и WPP могут (и в значительной степени) использоваться для программ обычного пользовательского режима.

...