我知道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
做错了我没有收到正确的堆栈地址信息,或者我正确使用它并且只是不知道如何传播数据?