Зависает поток отладки Windows Form

#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 — любой аналогичный инструмент для более поздней ОС?