Tag: stack trace

如何获取堆栈帧的执行对象?

使用reflection时,可以使用System.Diagnostics.StackTrace获取调用堆栈(除了它可以是由JIT优化引起的粗略近似)并检查包含的StackFrame对象。 如何获取对堆栈帧中的方法正在执行的对象(this-pointer)的引用? 我知道我可以通过在堆栈框架对象上调用GetMethod()来获取MethodBase,但我正在寻找的东西是GetObject()(如果方法是静态的话,它会自然地返回null)。 看起来堆栈帧对象只能查询静态确定的信息,例如方法信息,原始文件等。 VS调试器知道(尽管它可能使用另一种获取调用堆栈跟踪的方法),因为可以双击调用堆栈窗口中的任何堆栈帧并查看本地和类字段的值。 编辑:澄清:我想要调用该方法的对象实例 。 即:如果在调用堆栈的某个地方的对象实例A上调用方法Foo(),并且它级联到我执行堆栈跟踪的方法,我想从我执行堆栈跟踪的位置获取对A的引用。 (不是方法库的声明类型)

StackTrace / StackFrame不会在生产环境中返回预期信息

我在ASP.NET Web应用程序中使用以下方法来接收exception的堆栈跟踪: public static void getStackTraceInfo(System.Diagnostics.StackTrace trace) { for (int i = 0; i < trace.FrameCount; i++) { int nLine = trace.GetFrame(i).GetFileLineNumber(); int nCol = trace.GetFrame(i).GetFileColumnNumber(); string methodName = trace.GetFrame(i).GetMethod().Name; } } try { } catch(Exception ex) { getStackTraceInfo(new System.Diagnostics.StackTrace(ex, true)); } 如果我在Visual Studio 2010开发环境中运行它,它会为我提供完整的行/列/方法名称信息,但在IIS上的生产环境中,它将返回所有0和方法名称为空字符串。 我是否还需要做一些特殊的事情才能使它在IIS上运行?

调试异步/等待(调用堆栈)中的exception

我使用Async / Await释放我的UI-Thread并完成multithreading。 我遇到exception时遇到问题。 我的异步部分的Call Stack总是从ThreadPoolWorkQue.Dipatch()开始,这对我没有多大帮助。 我找到了MSDN文章Andrew Stasyuk。 Async Causality Chain跟踪它,但据我所知,它不是一个随时可用的解决方案。 如果在Async / Await中使用multithreading,最好/最简单的调试方法是什么?

如何获得stacktrace中的参数值

我可以通过StackTrace获取有关参数的信息,使用类似的方法: catch (Exception ex) { var st = new StackTrace(ex); System.Reflection.ParameterInfo pi = st.GetFrame(0).GetMethod().GetParameters().First(); } 我想知道我如何获得参数的值。 例: 如果我在堆栈跟踪中的方法是这样的: void MyMethod(object value) 电话就像: MyMethod(10); 我想得到价值10.我怎么做?

为什么Stack Trace显示我的开发文件路径?

Visual Studio 2010 SP1,已编译的WCF应用程序,将其放在服务器上,当然它在第一次运行时出现错误(有什么新内容),将堆栈跟踪输出到日志文件。 它正在看到我的开发环境的路径。 为什么? 是因为我将它部署为Debug与Release相比还是还有别的东西,或者我是否应该更谨慎地输出Stack Traces呢? 04/09/2012 03:58:46: Error: Object reference not set to an instance of an object. at App1.Logging.LogMessageToFile(String msg, Boolean isUsingClickOnceApp) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\Logging.cs:line 63 at App1.App1Main.ConnectWebService(String description) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\International.cs:line 40 04/09/2012 03:58:46: Error: Object reference not set to an instance of an object. at App1.App1Main.UpdateActivityLog(String data, […]

Stacktrace信息保留原始源的路径

我正在使用C#.net进行应用程序开发。 要记录和调试exception,我使用stacktrace。 我在另一台机器上执行了我的应用程序,但是当发生错误时,它指的是我的开发机器的路径。 Ex: D:\Projects\xyz.CS line no :12 _Error_message_here. 为什么即使我在另一台机器上运行应用程序,它也会跟踪我的开发机器路径上的路径?