Environment.StackTrace的问题

时间:2010-07-21 06:03:30

标签: c# .net stack-trace

在正在处理系统中新数据的线程上,如果数据无效,我会在事件日志中写一条包含Environment.StackTrace信息的消息。

在事件日志中写入会引发没有文本消息的异常

Message: 
CallStack -    at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
       at System.Environment.get_StackTrace()
       at <my method that writes in the event log>

为什么会发生这种情况?

编辑:我感兴趣的是什么可能导致Environment.StackTrace一般抛出异常,以便我能理解我的情况发生了什么

2 个答案:

答案 0 :(得分:2)

@anchandra我不知道你是否已经想到这一点,因为现在已经有4年了。

但是我想补充一下,因为我自己偶然发现了这一点。

那么,为什么Environment.StackTrace会抛出异常?

首先是最无趣的答案: 正如您在MSDN对该属性的引用中所看到的,如果“请求的堆栈跟踪信息超出范围”,它会抛出ArgumentOutOfRangeException。还要注意执行的上下文必须具有System.Security.Permissions.EnvironmentPermission。

现在让我困扰了一秒钟: 它不会抛出异常!是的,这就是我发生的事情,它实际上给我一个Stack Trace,它开始列出对Environment.StackTrace的调用,如“在System.Environment.get_StackTrace()”,然后它显示了所有其他调用方法。 因为我正在将其记录到审计日志中,如果你看一下,你会认为在堆栈的最后一帧发生了异常,但事实并非如此,我当时正在请求堆栈跟踪并坚持下去在我的错误日志中,一旦我意识到这一点就非常愚蠢。

答案 1 :(得分:0)

在移动到单独的线程之前,您需要捕获堆栈跟踪。

Stacktrace只会显示直到线程根目录的帧。

相关问题