Отладка по времени производства - процесс сеанса 0 - PullRequest
1 голос
/ 20 сентября 2011

У меня есть следующий сценарий:

  • Windows 2008
  • Служба, запущенная с определенными учетными данными пользователя (т.е. не системная учетная запись).
  • Эта служба запускает дочерний процесс
  • Дочерний процесс запускается, через секунду получает исключение и вылетает

Я пытаюсь подключить отладчик к дочернему процессу и отладить его до его сбоя

Я пытался использовать gflags и установить отладчик. Проблема в том, что служба работает в сеансе 0, поэтому Windbg недоступен для просмотра. Я не могу установить для службы «разрешить взаимодействие с рабочим столом», поскольку служба не может использовать учетную запись локальной системы, а должна использовать учетные данные конкретного пользователя.

Я не был уверен, предназначен ли он для такой работы, но я также пытался подключиться к этому windbg в сеансе 0 из другого экземпляра Windbg, используя Windbg -pe (поэтому у меня будет два запущенных Windbg). Но это не работает - второй экземпляр не может остановить процесс и увидеть его стек вызовов.

Есть какие-нибудь идеи, как подключить отладчик к дочернему процессу до его сбоя, чтобы отладить его?

Ответы [ 4 ]

3 голосов
/ 20 сентября 2011

Для этого вы можете использовать отладчик командной строки cdb.Запустите свой сервис с подключенным cdb и запустите как сервер отладки.Вы можете добавить следующую команду

"c: \ program files \ tools для отладки для windows \ cdb" -server tcp: port = 5500 -g -G

взначение реестра Отладчик (строка типа) раздела реестра

HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Параметры выполнения файла образа \ YourApplication.Exe

Тогдаиспользуйте windbg для подключения к серверу отладки с помощью

windbg -remote tcp: server = localhost, port = 5500

1 голос
/ 20 сентября 2011

Еще одна опция:

Когда WinDbg запускается автоматически, вы действительно его не видите.Однако вы можете настроить ntsd в качестве вашего jit-отладчика и включить удаленную отладку.Затем вы можете подключить WinDbg к ntsd и выполнить удаленную отладку процесса.Подробности см .: Отладка службы в Windows Vista .

0 голосов
/ 20 сентября 2011

Добавьте Sleep(30000) к точке входа вашего дочернего процесса. Это даст вам достаточно времени для подключения к отладчику.

0 голосов
/ 20 сентября 2011

Почему бы не начать с аварийных дампов? http://www.codeproject.com/KB/debug/automemorydump.aspx

...