1

У меня есть проблема с приложением, которое мы сделали, которое иногда завершается с ошибкой 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 ответа2

1

Хотя уже поздно, но я все же хотел обойти это. Я столкнулся с той же проблемой, и наткнулся на этот вопрос в поисках ответа. Позже я нашел обходной путь.

Обходной путь - вызвать скрипт, используя $> <или $$> <или $$> a <, чтобы команды были объединены в один командный блок.

Вот справка о Windbg

0

Вы можете попробовать .dump /ma /u c:\app.dmp чтобы получить аварийный дамп, который можно скопировать и проанализировать на вашем компьютере.

Однако вместо того, чтобы пытаться позволить пользователю запускать WinDbg на своем компьютере, вы можете автоматически создать аварийный дамп с помощью WER, скопировать его на свой компьютер и затем проанализировать без затрат времени. См. Сбор дампов пользовательского режима для создания настроек в Реестре, которые хранят дамп на диске.

В обоих случаях вы должны скопировать из C:\Windows\Microsoft.NET\Framework\v4.0.30319 (или Framework64):

В противном случае может случиться так, что ваша версия .NET отличается от его версии, и вы не сможете проанализировать ошибку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .