如何从托管代码中捕获的本机异常中获取本机堆栈跟踪我有合适的符号文件)。有时,该本机方法会引发异常,我会在托管代码中捕获该异常。但是,当我从捕获的异常打印堆栈跟踪时,我只看到托管代码(最后一帧是对本机代码的调用......但它没有看到本机代码中的堆栈跟踪)。如何获取本机调用堆栈?*当我调试代码时,我可以进入本机代码,并查看实际的调用堆栈。获取本机堆栈跟踪非常困难。当它通过.NET/本机转换层时,本机堆栈跟踪将丢失。所以你需要在仍然使用原生代码的情况下捕获它,这也是非常困难的。查看JohnRobbins的正确本地堆栈跟踪工作;他能找到的SUPERASSERT的最后一个公开版本来自MSJ,1999年2月。这不像在捕获异常时显示本机调用堆栈那样灵活,但是如果您试图在用户的机器和用户相当精明,你可以让他们在WinDbg下运行你的应用程序。当抛出本机异常并且可以查看调用堆栈时,它将中断。另一种可能性是使用stackwalker。它是免费的,可以在这里找到:http://www.codeproject.com/KB/threads/StackWalker.aspx如果您知道顶级本机调用,您可以用__try/__catch包装它并使用stackwalker转储堆栈到日志文件。大概您还可以捕获异常,使用stackwalker获取调用堆栈,将调用堆栈添加到异常(作为字符串),然后将异常重新抛出到您的.NET代码中。然后.NET代码可以从您的异常中获取调用堆栈。以上就是C#学习教程:Howtogetthenativestacktracesharingfromthenativeexceptioncapturedinthemanagedcode的全部内容。如果对你有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
