如何获取堆栈跟踪中参数的值

18

我可以通过类似以下方式使用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。如何做到?


2个回答

10

你的第二个链接已经失效,供参考。 - Fredou
1
@Fredou:感谢您告诉我,我已经更新了信息的新地址链接。 - Ben Voigt
1
示例请! - Demodave

3
除非您正在创建高度依赖CLR(补丁)版本的解决方案,否则不建议使用C#。但是可以通过将Windbg附加到您的进程,加载sos.dll并切换到您的线程,然后输入以下内容来实现:
!ClrStack -p

展示大多数方法的托管调用堆栈和方法参数。即使在调试器下,由于内联和JIT优化,堆栈布局非常灵活,因此这甚至不是绝对可靠的。除此之外,一些参数可能甚至不会出现在堆栈内存中,因为它们是通过寄存器传递的(在x64平台上更为常见)。
回答你的第一个问题。不,你正在尝试的方法是不可能的。可行的解决方案可能存在,但并不具有可移植性。托管调试器可以部分检索您的参数,但没有100%的工作解决方案(即使在调试器下)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接