2015-06-20 6 views
1

Существует C# -программа, которая висит довольно редко. Выполнение программы происходит на удаленных компьютерах и запуск отладчика не является вариантом. Запуск внешнего профилировщика более реалистичен, но также сопряжен с огромными трудностями. Как вы можете определить точку зависания программы без профилирования или отладчика?Идентификация точки подвески программы

Вариант «подробный вход в систему FS» плохо подходит. Программа состоит из около 20 тысяч строк кода и зависает не часто.

Я пробовал Process Explorer, но он работает очень странно (или я его не понял). Если вам удалось «поймать» момент, когда поток вступил в бесконечный цикл, в этот момент можно увидеть стек. Но этот поток довольно быстро исчезает (будь то в PE или он действительно убит средой).

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

+0

Все записи в окне просмотра журнала событий приложений? –

+1

Может ли это быть другое программное обеспечение (например, db dump или запланированное обслуживание)? – NoChance

+0

@ Pierre-LucPineault, большое спасибо. Я проверил стандартный журнал событий Windows Aplication и нашел записи об этих ошибках. Я знаю точное время зависания, поэтому не было проблем с обнаружением ошибок моего приложения. Вы можете написать ответ, чтобы получить carma). –

ответ

0

Когда приложение выходит из строя, оно, как правило, должно быть записано в Window Application Event Log. Это не очень подробно, но в любом случае должно давать довольно твердые подсказки без каких-либо внешних инструментов.

Чтобы попасть туда, вы можете либо найти «Журнал событий» в меню «Пуск», либо найти его на панели управления. Он находится в разделе Administrative Tools.

После того, как вы находитесь в окне просмотра событий, откройте пункт Windows Logs слева, затем выберите Application. Вы должны найти свое приложение в списке, используя столбец «Источник».

Внизу вы найдете подробную информацию об ошибке, временную метку и еще пару сведений, которые могут помочь вам отладить ваше приложение.

Windows Event Log Изображение взято из Cyberlink.com

0

Под «зависанием» вы подразумеваете, что программа перестает работать до тех пор, пока она не будет перезапущена или программа не остановится на необычное время. Если последний может быть в тяжелой коллекции GC. Если это первый, и вы подозреваете какой-то бесконечный цикл, то в диспетчере задач (или в проводнике процессов) вы должны увидеть, что он почти съедает один из процессорных ядер. Например, если у вас четыре ядра и программа, зависающая в замкнутом цикле, вы увидите примерно 25% использования процессора на панели производительности (при условии, что в противном случае легко загружена машина).

MS поддерживает управляемую отладку, см. Debugging Managed Code Using the Windows Debugger Вы можете использовать расширение sos, чтобы разбить выполнение кода и посмотреть состояние программы. Возможно, вы захотите, чтобы программы pdb были удобными, если вы примете такой подход.

Смежные вопросы