В целях тестирования я планирую собрать небольшое приложение, которое будет прослушивать конкретное событие, исходящее от приложения, и взаимодействовать с ним в этот момент.
Учитывая, что мы находимся на этапе процесса тестирования, когда об изменении кода приложения не может быть и речи, идеальным, с моей точки зрения, было бы прослушивание трассировки отладки из приложения, как это делает debugview, и ответ к этому.
Может ли кто-нибудь дать совет, как лучше всего это сделать?





Может ли приложение, которое вы хотите отслеживать, использовать стандартную трассировку на основе System.Diagnostics? В этом случае вы можете создать свой собственный TraceListener.
Я нашел способ сделать это, используя Инструменты mdbg от Microsoft, чтобы дать мне доступ из среды выполнения к основной отладочной информации. Базовая форма кода, который я использую, выглядит так:
MDbgEngine mg;
MDbgProcess mgProcess;
try
{
mg = new MDbgEngine();
mgProcess = mg.Attach(debugProcess.Id);
}
catch (Exception ed)
{
Console.WriteLine("Exception attaching to process " + debugProcess.Id );
throw (ed);
}
mgProcess.CorProcess.EnableLogMessages(true);
mgProcess.CorProcess.OnLogMessage += new LogMessageEventHandler(HandleLogMessage);
mg.Options.StopOnLogMessage = true;
mgProcess.Go().WaitOne();
bool running = true;
Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
while (running)
{
try
{
running =mgProcess.IsAlive;
mgProcess.Go().WaitOne();
}
catch
{
running = false;
}
}
Похоже, что он работает достаточно хорошо для того, что мне нужно, в любом случае, возможно, он станет полезным шаблоном для всех, кто окажется в той же лодке.
@Tur, я боюсь, что это было несколько лет назад и пару версий .Net - я вообще не могу сказать, что они не изменили его поведение.
Что вы делаете в HandleLogMessage? он сообщает мне, что я не могу получить доступ к внутреннему делегату LogMessageEventHandler?