如何从SEHexception生成堆栈跟踪

我正在使用Win32 SEH捕获exception:

try { // illegal operation that causes access violation } __except( seh_filter_func(GetExceptionInformation()) ) { // abort } 

filter函数如下所示:

 int seh_filter_func(EXCEPTION_POINTERS *xp) { // log EIP, other registers etc. to file return 1; } 

这工作到目前为止, xp->ContextRecord->Eip的值告诉我哪个函数导致了访问冲突(实际上是 – ntdll.dll!RtlEnterCriticalSection,EDX的值告诉我这个函数是用一个假参数调用的)。

然而,这个函数在很多地方被调用,包括其他的WinAPI函数,所以我仍然不知道哪个代码负责调用这个函数的伪造参数。

是否有任何代码可以用来生成一个函数调用链的踪迹,这个函数调用的链路是根据EXCEPTION_POINTERS的信息或者其他的信息导致到现在的EIP? (在外部debugging器下运行程序不是一个选项)。

只要EIP值可以,因为我可以在链接器映射和符号表中查找它们,但是如果有一种方法可以自动将它们映射到更好的符号名称。

我为这个项目使用C ++ Builder 2006,尽pipe一个MSVC ++解决scheme可能无论如何工作。