クラスについては知っていStackTrace
ますが、私がやっていることは、すべてのシンボル検索のために遅すぎます。
RtlCaptureStackBackTrace
で機能について聞きましKernel32.dll
たが、正しく機能させることができないようです。私はピンボークに慣れていないので、何もする必要はほとんどなく、私がしていることはネットでよくカバーされていますが、これはそうではありません:(.
これは私が持っている定義です:
[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
、正しいスタックアドレス情報を受け取っていないこと、またはそれを正しく使用していて、データを配布する方法がわからないということです。