我在内核模式驱动程序中使用RtlCaptureStackBackTrace,并试图获取调用跟踪,但它捕获了零帧。代码为:
PVOID *stackTrace = NULL;
PULONG traceHash = NULL;
USHORT capturedFrames = 0;
capturedFrames = RtlCaptureStackBackTrace(0, 10, stackTrace, traceHash);
当我检查stacktrace时,它是NULL。
您提供stackTrace
作为NULL
,但根据文档:
调用方分配的数组,其中指向返回地址的指针返回从当前堆栈跟踪捕获的。
这意味着您需要为BackTrace
参数分配一个数组。
例如:
#define ARRAY_SIZE 10
PVOID stackTrace[ARRAY_SIZE] = {0};
USHORT capturedFrames = 0;
capturedFrames = RtlCaptureStackBackTrace(0, ARRAY_SIZE, stackTrace, NULL);
注意:不要在生产代码中使用它,最好使用ExAllocatePoolWithTag()
(进行动态分配
另请查看此Microsoft示例