2014-09-03 2 views
0

У меня есть консольное приложение C#, которое я запускаю. Я выпустил его, так как хотел бы немного провести тестирование на нескольких компьютерах.Поиск журнала трассировки стека из EXE, который сбой

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

Есть ли способ, чтобы я мог видеть журнал трассировки стека, похожий на его запуск в Visual Studio? Я думал, что это возможно с помощью Windows Event Viewer, но я не совсем уверен в этом. Или, по крайней мере, разрешить Консоль быть видимым и не закрывать его автоматически, когда я подтвержу, что есть ошибка.

ответ

1

Вы можете сделать все, что вы упомянули. например чтобы увидеть ошибки в окне консоли, вы можете поставить блок catch try вокруг своего кода и вызвать методы Console.WriteLine() и Console.ReadLine().

Существует также метод stacktrace.tostring() - например.

http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.tostring(v=vs.110).aspx

Консольные приложения автоматически закрываются, даже если вы положили Console.WriteLine() в коде. Что вам нужно, это Console.ReadLine() в конце, возможно, в разделе finally вашего блока catch try.

Таким образом, консольное окно останется открытым.

Вы также можете записывать события в журнал событий через консоль ap и видеть их в средстве просмотра событий.

Это делается с помощью метода EventLog.CreateEventSource с использованием пространства имен System.Diagnostics. Ссылка ниже:

http://support.microsoft.com/kb/307024

Другой способ заключается в использовании System.IO писать строки в лог-файл (например, .txt файл), так что вы можете оглянуться на ошибки, если процесс бежал поздно ночью например. В этом случае, вы можете использовать такой код:

public static void LogMessage(string message) 
    { 
     TextWriter textWriter = new StreamWriter("download.log", true); 
     textWriter.WriteLine(message); 
     textWriter.Close(); 
    } 

и затем в вашем исключении:

catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
      Logging.LogMessage(ex.Message); 
     } 
Смежные вопросы