2

我知道这StackTrace门课,但是由于所有的符号查找,我正在做的事情太慢了。

我听说过这个RtlCaptureStackBackTrace功能,Kernel32.dll但我似乎无法让它正常工作。我对 pinvoke 不熟悉,因为我很少需要对它做任何事情,而且我所做的事情在网上都有很好的报道,但这不是 :(。

这是我的定义:

[DllImport("kernel32.dll")]
public static extern ushort RtlCaptureStackBackTrace(uint FramesToSkip, uint FramesToCapture, out IntPtr BackTrace, out uint BackTraceHash);

这就是我使用它的方式:

IntPtr trace = IntPtr.Zero;
uint traceHash = 0; 
int framesCaptured = 0;

framesCaptured = RtlCaptureStackBackTrace(0, 4, out trace, out traceHash);

int[] frames = new int[framesCaptured];
Marshal.Copy(trace, frames, 0, framesCaptured);

我看到的是 framesCaptured 是 1,这应该是至少 4 个用户调用加上我的测试应用程序的系统调用。

编辑:我可能应该明确一点,我的问题是我做错了什么RtlCaptureStackBackTrace,我没有收到正确的堆栈地址信息,或者我是否正确使用它并且只是不知道如何传播数据?

4

0 回答 0