Установка условия "! Stoponexception" для windbg через командную строку / скрипт запуска?
У меня есть проблема с приложением, которое мы сделали, которое иногда падает с StackOverflowException в некотором коде.NET.
К сожалению, приложение частично неуправляемое и частично управляемое, и по какой-то причине проблема проявляется только на компьютерах, не принадлежащих разработчикам.
Мой текущий план состоит в том, чтобы использовать WINDBG (часть средств отладки для Windows от Microsoft), установленную на компьютерах тестеров, и я могу заставить WINDBG перехватить создание рассматриваемого исключения.
Таким образом, я могу сделать следующее:
sxe ld:mscorlib
g
.loadby sos clr
!stoponexception -create System.StackOverflowException
g
К сожалению, поскольку эта проблема возникает только через день и только после 50+ выполнений, я бы предпочел, чтобы тестировщикам приходилось вводить это полностью или частично при каждом запуске этого приложения.
Я попытался поместить вышеупомянутые команды в текстовый файл и создал ярлык для них следующим образом:
"...\windbg.exe" -c "$<c:\windbg.txt" -o "...\app.exe"
Это запускает отладчик WINDBG, но, к сожалению, не с этим сообщением об ошибке:
0:000> sxe ld:mscorlib
0:000> g
Command file caused an implicit wait
Command file execution failed, HRESULT 0x80004005
"Unspecified error"
По-видимому, g
не допускается в таком сценарии запуска.
Можно ли делать то, что я хочу? Могу ли я автоматизировать это, или мне просто нужно подготовить пакетный файл или что-то, что использует autohotkey, который делает это?
2 ответа
Хотя уже поздно, но я все же хотел обойти это. Я столкнулся с той же проблемой, и я наткнулся на этот вопрос в поисках ответа. Позже я нашел обходной путь.
Обходной путь - вызвать скрипт, используя $><или $$><или $$>a<, чтобы команды были объединены в один командный блок.
Вы могли бы попробовать .dump /ma /u c:\app.dmp
так что вы получите аварийный дамп, который можно скопировать и проанализировать на вашем компьютере.
Однако вместо того, чтобы пытаться позволить пользователю запускать WinDbg на своем компьютере, вы можете автоматически создать аварийный дамп с помощью WER, скопировать его на свой компьютер и затем проанализировать без затрат времени. См. Сбор дампов пользовательского режима для создания настроек в Реестре, которые хранят дамп на диске.
В обоих случаях вы должны скопировать из C:\Windows\Microsoft.NET\Framework\v4.0.30319 (или Framework64):
В противном случае может случиться так, что ваша версия.NET отличается от его версии, и вы не сможете проанализировать ошибку.