![]() |
1
2
我想你搞错了。在这里。 如果您在某个catch语句中捕获异常,或者将异常传播到主堆栈被释放,并且您不能期望vc++记住整个堆栈。 例如,Java堆栈跟踪是异常本身的一部分。依赖于编译器,您可以编写一个异常类,如果堆栈跟踪是构造的(而不是复制构造的),它将记录并携带信息。当类被捕获时,您可以计算该信息。如果使用MFC编程,请查看afxdumpstack。
希望能有所帮助,
P.S:这篇DDJ文章可能对您有所帮助: C++ Stack Traces |
![]() |
2
3
问题是,没有为调试器停止的位置加载任何调试符号。这意味着调用堆栈的其余部分是无意义的。 幸运的是,解决方案很简单:从调用堆栈窗口的顶部开始,右键单击每个灰显条目(例如kernelbase.dll!)……并选择 从/Microsoft符号服务器加载符号 . 对一个或两个条目执行此操作后,将显示真正的调用堆栈。 |
![]() |
3
3
我敢打赌问题是您没有启用“异常中断”。我也遇到了同样的问题,我不敢相信我找不到有用的答案……我的VS2008是如何被配置成不同的?我不知道。但有一天,当一个调试过的程序崩溃时,我的调用堆栈变得毫无用处。最后,我检查了所有这些类的异常以使程序“在异常时中断”,现在当抛出异常(例如访问错误)并且我有一个有用的调用堆栈来调试时,它就中断了。哎呀! |
![]() |
4
1
可能你看的是错误线程的调用堆栈。 转到Debug->Windows->线程中的“踏面”面板,然后选择正确的线程。 |