2010-07-21 79 views
0

在处理系统中新数据的线程上,如果数据无效,我会在事件日志中写入一条消息,其中包含Environment.StackTrace信息。环境问题.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抛出异常一般,所以我能理解什么是我的情况发生

+3

你可以发布写入事件日志并使用'Environment.StackTrace'的代码吗? – Oded 2010-07-21 06:05:33

+0

在您记录消息时,对'Environment.StackTrace'的调用抛出异常。你能发布足够的代码吗? – shahkalpesh 2010-07-21 06:08:27

+0

这是在一个线程? – leppie 2010-07-21 06:10:12

回答

0

你需要移动到一个单独的线程之前捕获堆栈跟踪。

Stacktrace将只显示直到线程根部的帧。

+0

是的,我只会看到线程的框架,但为什么会抛出异常? – anchandra 2010-07-22 02:47:41

1

@anchandra我不知道你是否已经认识到了这一点,因为现在已经4岁了。

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

那么,为什么Environment.StackTrace引发异常呢?

首先最无趣的答案: 正如你可以在MSDN参考属性看,它可如果“请求的堆栈跟踪信息超出范围”抛出ArgumentOutOfRangeException,还要注意执行上下文必须有System.Security.Permissions.EnvironmentPermission。

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