2012-05-10 3 views
4

Есть ли возможные сценарии, где трассировка стека может быть полностью пустой? Я прошел текст журнала событий, скопированный из свойств машины событий, в котором говорится следующее:Пустой StackTrace. Возможное?

Описание: Произошло необработанное исключение, и процесс был прекращен.

ID приложения: DefaultDomain

ID процесса: 123

Исключение: System.OutOfMemoryException

Сообщение: Исключение типа 'System.OutOfMemoryException' был брошен.

StackTrace:

Для получения дополнительной информации см Центр справки и поддержки на http://go.microsoft.com/fwlink/events.asp.

The Stack Trace выглядит подозрительно для меня. Я много искал на форумах и в документах - ничего не было о том, что Stack Trace пуст. Только MSDN упоминает «Свойство StackTrace может не сообщать столько вызовов методов, сколько ожидалось, из-за преобразований кода, таких как inlining, которые возникают во время оптимизации.« но ничего о каких-либо вызовах вызова метода вообще.

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

Любые поправки к моим подозреваемым, что Трассировка стека не может быть пустым?

+3

С исключением OOM, все возможно! – Oded

+5

OutOfMemoryException? Вероятно, недостаточно памяти даже для stacktrace. – nothrow

ответ

2

Иногда сам вызов может быть причиной OOM (слишком много в стеке вызовов).

Итак ... вы видите проблему.

Или куча может быть исчерпана, или ... или, см. @ Прокомментированный комментарий!

2

Чтобы создать сообщение в журнале событий, необходимо восстановить свойство строки Exception.StackTrace. Вычисление значения для этого свойства включает в себя создание нового объектаStackTrace. Если приложение потеряло память, это может быть невозможно, поскольку распределение не выполняется. Это может объяснить, почему трассировка стека отсутствует.

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