#c# #debugging #com
#c# #отладка #com
Вопрос:
У меня есть приложение C # winforms, которое взаимодействует с различными источниками данных com и использует threadpool для большей части своей внутренней обработки. Я заметил, что 2-3 раза в день поток winforms зависает на 20-30 секунд (видно в пользовательском интерфейсе, и что com-данные останавливаются на 20-30 секунд). С тех пор я написал простую задачу в threadpool, которая отслеживает сердцебиение в потоке winforms для обнаружения этих экземпляров, но я ищу способ автоматического запуска полного дампа (не мини-дампа), чтобы я мог видеть, что именно поток winforms делает во время этих пауз.
Существуют ли какие-либо простые приложения командной строки, которые мой фоновый поток может вызывать в своем собственном процессе для привязки к приложению в качестве отладчика, генерации полного файла дампа и последующего возобновления работы приложения?
Есть ли лучший способ отладить это?
Комментарии:
1. Подобные задержки, вероятно, вызваны полной сборкой мусора. Либо с включенным gcServer, либо с приложением, исчерпывающим возможности одновременной / фоновой обработки данных. Потоки будут заблокированы, включая ваш сторожевой поток, если вам не удастся заставить его не выделять никакой памяти GC.
Ответ №1:
Вы можете использовать утилиту SysInternals procdump для создания файлов дампа:
ProcDump — это утилита командной строки, основной целью которой является мониторинг приложения на предмет скачков процессора и генерация аварийных дампов во время скачка, которые администратор или разработчик могут использовать для определения причины скачка.
Ответ №2:
Похоже, что Process Dumper должен сделать свое дело.
Комментарии:
1. Отличный инструмент — но он не будет устанавливаться на Win 7 — любой аналогичный инструмент для более поздней ОС?