Как я отлаживаю .net Fatal Execution Engine Error?

Обновление:

приблизительно 10 лет спустя, возможно, лучший способ протестировать закрытый метод или любого недоступного участника, через [1 127] @Jailbreak от Коллектор платформа.

@Jailbreak Foo foo = new Foo();
// Direct, *type-safe* access to *all* foo's members
foo.privateMethod(x, y, z);
foo.privateField = value;

Этот путь Ваш код остается безопасным с точки зрения типов и читаемым. Никакие компромиссы дизайна, никакие методы переэкспонирования и поля ради тестов.

, Если у Вас есть своего рода наследие приложение Java , и Нельзя изменить видимость Ваших методов, лучший способ протестировать закрытые методы состоит в том, чтобы использовать отражение .

Внутренне мы используем помощников, чтобы получить/установить private и private static переменные, а также вызвать private и private static методы. Следующие шаблоны позволят Вам сделать в значительной степени что-либо связанное с закрытыми методами и полями. Конечно, Вы не можете измениться private static final переменные посредством отражения.

Method method = TargetClass.getDeclaredMethod(methodName, argClasses);
method.setAccessible(true);
return method.invoke(targetObject, argObjects);

И для полей:

Field field = TargetClass.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(object, value);

Примечания:
1. TargetClass.getDeclaredMethod(methodName, argClasses) позволяет Вам изучить private методы. То же самое запрашивает getDeclaredField.
2. Эти setAccessible(true) требуется, чтобы играть вокруг с рядовыми.

5
задан Paul-Jan 30 July 2009 в 08:06
поделиться

1 ответ

Краткий ответ: прочтите блог Тесс Феррандес . Он содержит множество бесценных рекомендаций по отладке приложений .NET и расскажет, как это сделать.

Более длинный ответ ...

В Visual Studio

Если у вас установлена ​​Visual Studio, вы можете попробовать сломать любой необработанный Исключение .NET. Чтобы включить это, перейдите в меню и выберите «Отладка», «Исключения» и отметьте «Исключения среды CLR». Затем перейдите в Инструменты, Параметры, Отладка и снимите флажок Включить только мой код. Наконец, подключитесь к процессу мастера настройки (очевидно, что он сначала должен быть запущен), и отладчик Visual Studio прекратит работу в момент возникновения исключения.

Предполагая, что отладчик не работает (если он этого не делает) (если вы подключились к неправильному процессу), тогда у вас должен быть доступ к стеку вызовов и вы можете делать обоснованные предположения по именам методов о том, что происходит не так. Однако есть вероятность, что это запутано, что не поможет. Вы также сможете увидеть текущую инструкцию MSIL, на которой остановился отладчик. Здесь все начинает выходить за рамки меня, но есть хорошие ссылки, которые помогут вам понять, что происходит в коде.

Без Visual Studio

Если у вас нет Visual Studio или по какой-то причине вы можете ' t заставить отладчик сломаться, тогда можно создать дамп процесса сбоя. Я знаю два метода. Один из них описан командой разработчиков Windows Server Performance с использованием старого доброго доктора Ватсона. Другой - это новый инструмент, только что выпущенный Марком Руссиновичем под названием ProcInfo , который может автоматически создавать дамп процесса, который аварийно завершает работу из-за необработанных исключений. Вероятно, есть и другие методы.

Когда у вас есть дамп, вы можете использовать эту статью базы знаний , чтобы помочь вам настроить его отладку.

Наконец,

Вернуться к «короткому ответу» выше: читайте блог Тесс, чтобы продвигаться дальше! Это большая тема, и у нее есть лучшие ресурсы, которые я когда-либо находил. Также есть хороший пост Винсента Ротвелла , который может помочь, но на самом деле он нацелен на отладку вашего собственного кода.

Кстати, вы не должны получать исключения, которые у вас есть. Это указывает на довольно серьезную проблему. Я бы посмотрел на повреждения, серьезные аппаратные неисправности и рассмотрел вопрос о восстановлении.

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

Наконец,

Вернитесь к «короткому ответу» выше: прочтите блог Тесс. прогрессировать дальше! Это большая тема, и у нее есть лучшие ресурсы, которые я когда-либо находил. Также есть хороший пост Винсента Ротвелла , который может помочь, но на самом деле он нацелен на отладку вашего собственного кода.

Кстати, вы не должны получать исключения, которые у вас есть. Это указывает на довольно серьезную проблему. Я бы посмотрел на повреждения, серьезные аппаратные неисправности и рассмотрел вопрос о восстановлении.

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

Наконец,

Вернитесь к «короткому ответу» выше: прочтите блог Тесс. прогрессировать дальше! Это большая тема, и у нее есть лучшие ресурсы, которые я когда-либо находил. Также есть хороший пост Винсента Ротвелла , который может помочь, но на самом деле он нацелен на отладку вашего собственного кода.

Кстати, вы не должны получать исключения, которые у вас есть. Это указывает на довольно серьезную проблему. Я бы посмотрел на повреждения, серьезные аппаратные неисправности и рассмотрел вопрос о восстановлении.

Это большая тема, и у нее есть лучшие ресурсы, которые я когда-либо находил. Также есть хороший пост Винсента Ротвелла , который может помочь, но на самом деле он нацелен на отладку вашего собственного кода.

Кстати, вы не должны получать исключения, которые у вас есть. Это указывает на довольно серьезную проблему. Я бы посмотрел на повреждения, серьезные аппаратные неисправности и рассмотрел вопрос о восстановлении.

Это большая тема, и у нее есть лучшие ресурсы, которые я когда-либо находил. Также есть хороший пост Винсента Ротвелла , который может помочь, но на самом деле он нацелен на отладку вашего собственного кода.

Кстати, вы не должны получать исключения, которые у вас есть. Это указывает на довольно серьезную проблему. Я бы посмотрел на повреждения, серьезные аппаратные неисправности и рассмотрел вопрос о восстановлении.

8
ответ дан 14 December 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: