Создание дампов с помощью ProcDump
![]()
Бываю случаи, когда встроенный в GOALcity автоматический сборщик дампов не работает, или работает не корректно. При этом дампы могут либо вообще не создаваться, либо создаваться с ошибками. Чтобы исправить это, и при «падении» программы получить полноценную отладочную информацию в GOALcity был добавлен дополнительный инструмент отладки — ProcDump.
Важно! По умолчанию GOALcity использует встроенный сборщик дампов, которого, в большинстве случаев, хватает. Используйте ProcDump только по рекомендации службы технической поддержки.
ProcDump включается с помощью служебной утилиты GOALcity , иначе — Tweak’eр. Чтобы его запустить, откройте меню «Пуск», далее «Все программы», SpecLab», «GOALcity» и выберите «GOALcity Tweak» .
Откроется окно твикера с различными параметрами. Ни в коем случае не изменяйте их, если не знаете что делаете или Вам это не рекомендовала служба технической поддержки. Изменение параметров в твикере может повлечь за собой нестабильную работу системы или вообще её полный отказ.

• «Проскрольте» окно в самый низ, и найдите строчку «Использовать ProcDump для создания дампов» .
• Активируйте этот пункт, поставив «птичку» перед ним.
• Переместите курсор мыши на надпись «Нет» справа, кликните левой кнопкой мыши и выберите пункт «Да» .
• Внешний вид окна с включенным ProcDump будет следующий:

• Теперь все дампы будут создаваться используя ProcDump до выключения в твикере. Вместе с GOALcity запускается процесс procdump.exe, контролирует работу системы и завершается при выгрузке GOALcity . В случае непредвиденного завершения процессов клиента GOALcity ( goalcity.exe ) или службы ( slssh.exe ) — создает дампы памяти.
• Дампы сохраняются по пути «Системный диск:\Users\»Текущий пользователь»\AppData\Roaming\SpecLab\GOALcity\GOALcity\xml_log\ — от клиентской части GOALcity и по пути «Системный диск»:\Users\All Users\SpecLab\GoalCity\Server Host\xml_log\» — от серверной части.
Зачем нужен дамп и как его сделать
Для выявления причин сложных ошибок в программе TSLab может понадобится дамп памяти программы. Далее я расскажу в каких случаях он поможет и как его получить. Что такое дамп можно почитать здесь.
В начале небольшое введение, что из себя представляет код программы TSLab. Программа построена на управляемом коде и выполняется под управлением .NET Framework. Но для получения данных от брокера она взаимодействует с кодом провайдера данных, который в существующих вариантах (Transaq, SmartCom, Alor) выполнен в виде неуправляемого кода или машинного кода.
![]()
Если происходит ошибка в управляемом коде то она перехватывается внутри программы и, в зависимости от ошибки, или просто делается запись в лог-файл и продолжается выполнение программы или, для тяжелых ошибок, выводится диалог и программа аварийно завершается. В случае ошибки в неуправляемом коде .NET Framework в большинстве случаев перехватывает их превращает их в управляемое исключение, которое потом перехватывает программа. Но при определенных ошибках, как например
![]()
программа просто аварийно завершается без передачи управления в программу. В этом случае ни о какой записи в лог и речи не идет. В данном случае для выяснения причин где и из-за чего произошла ошибка поможет дамп.
Еще в одном случае он поможет в выяснении причины. Это в случае когда программа “зависает”, т.е. перестает реагировать на действия пользователя. В этом случае в логе программы тоже ничего не будет. Но здесь надо отличать зависание программы от замедленной реакции программы под нагрузкой. Такое поведение например получается когда на слабом компьютере запустить многопоточную оптимизацию и одновременно открыть много окон с быстроменяющимися инструментами.
Что делать в вышеперечисленных случаях? К сожалению по логам и тем более по скриншоту в данных ситуациях невозможно понять причину ошибки. Тут надо получать дамп и анализировать его. До недавнего времени считали что в таких случаях единственный вариант, это договариваться с пользователем о доступе на компьютер, т.к. получение дампа требовало установки специальных инструментов и умения работать с ними, что конечно нельзя предлагать обычным пользователям. В случае с паркингом это еще срабатывало, но в обычных случаях это проблематично.
Решение нашлось в виде относительно новой бесплатной программы ProcDump от известного автора Русиновича. Она позволяет создавать дамп при определенных условиях, которые задаются в командной строке. Давайте разберем что надо сделать для получения дампа в случаях зависания и краха программы. Предварительно надо установить на компьютер программу.
- Скачать procdump.zip с http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx

- Распаковать procdump.zip в какой-либо каталог, например c:\utils.
- Открыть окно командной строки. Пуск ->Все программы ->Стандартные ->Командная строка.В случае работы под Vista или Windows 7 запускать надо от имени администратора. Для запуска с правами администратора, необходимо сделать следующее: Пуск — Все программы — Стандартные — Командная строка. Жмем правую клавишу и выбираем Запуск от имени администратора.
- С командной строки перейти в папку где распакован procdump

- Запустить программу procdump. При первом запуске она выводит окно с пользовательским соглашением, которое надо принять.Далее шаги для случая зависания и краха отличаются. Рассмотрим случай зависания, это более простой случай. В момент когда программа зависла надо запустить procdump со следующими параметрами:C:\utils>procdump -ma TSLabApp.exe crash.dmp
После этого в текущей папке создастся файл crash.dmp.В случае с крахом(падением) программы все обстоит сложнее. В тот момент когда появился диалог об ошибке уже поздно что-то делать. В этот момент программа уже аварийно завершилась. Дальнейшие действия имеет смысл предпринимать только если подобная ошибка проявляется регулярно и в определенных ситуациях, например при выходе из программы после того как программа отработала весь день. В этом случае перед этим надо запустить программу procdump со следующими параметрами:
C:\utils>procdump –e -w -ma TSLabApp.exe crash.dmp
Программа выполняется до тех пор пока не завершиться выполнение TSLabApp.exe, и в случае если она завершиться с ошибкой то создастся дамп. - Размер дампа варьируется от условий работы программы. Он хорошо сжимается, поэтому для пересылки его лучше запаковать, размер архива получится по крайней мере в два раза меньше исходного файла, и вложить его в сообщение на сайте поддержки http://support.tslab.ru/ с описанием ситуации.
Также есть еще один путь создания лога при падении программы, который работает на Windows 7. Для этого надо загрузить файл dump.reg (делается полный дамп) и кликнуть на нем. При этой операции требуются права администратора. Появится окно подтверждения, на котором надо ответить утвердительно.
После этого при падении программы TSLab в каталоге CrashDumps на диске с: будет создаваться дамп. В файле настроено, что максимально число дампов будет 2, далее новый дамп будет переписывать предыдущий. Более подробно можно почитать в msdn (на английском).
Дамп будет создаваться только при падении программы TSLab.
В дальнейшем, чтобы удалить данную функциональность, надо с помощью программы regedit удалить ветку реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps.
Microsoft выпустила Linux-версию утилиты ProcDump
ProcDump для Linux — реинкарнация классического инструмента ProcDump из комплекта технических средств и утилиты для управления, диагностики, устранения неполадок и мониторинга среды Microsoft Windows.
Конкретно этот инструмент от Марка Русиновича показывает, сколько ресурсов центрального процессора должен занимать процесс и какое время должно пройти, прежде чем ProcDump создаст дамп процесса. То есть дамп записывается автоматически, когда процесс в очередной раз повысит нагрузку на центральный процессор выше определённого порога.
Например, под Windows мы хотим изучить аномальное поведение wmiprvse.exe (процесс WMI Provider Host), который в произвольные моменты времени занимает до 90% ресурсов CPU. Тогда запускаеми следующую команду, которая трижды запишет дамп этого процесса в случае, если потреблением им CPU в течение трёх секунд превышает 80%.
procdump.exe -c 80 -s 3 -n 3 wmiprvse
Действительно, очень удобно.

Версия под Linux работает примерно так же, как под Windows, разве что опций в программе поменьше:
Usage: procdump [OPTIONS. ] TARGET OPTIONS -C CPU threshold at which to create a dump of the process from 0 to 100 * nCPU -c CPU threshold below which to create a dump of the process from 0 to 100 * nCPU -M Memory commit threshold in MB at which to create a dump -m Trigger when memory commit drops below specified MB value. -n Number of dumps to write before exiting -s Consecutive seconds before dump is written (default is 10) TARGET must be exactly one of these: -p pid of the process -w Name of the process executable
В данный момент поддерживается работа только на ядре 3.5 или более старшей версии.
- Настройка Linux
- Open source
- Системное администрирование
- Серверное администрирование
- Софт
Procdump как пользоваться
Регистрация: 05.04.2011
Сообщений: 508
Записей в блоге: 1
Репутация: 40
Как запустить утилиту procdump?
В некоторых случаях нет падения, но есть проблема следующего типа : Что-либо подвисает, невозможно войти в сессию, хотя свободные ключи есть и т.д.
Для решения этой проблемы технической поддержке все равно нужен дамп памяти терминального сервера, получить его можно и без падения.
Ее нужно запустить таким образом:
procdump -o ViTerminal.exe dump.dmp — вот непонятно как ее таким образом запустить?