C程序崩溃时如何获取堆栈跟踪? (使用msvc8 / 2005)

有时我的c程序在调试模式下崩溃,我得到的是一个消息框,说明某些内部内存管理例程中的断言失败(访问未分配的内存等).但我不知道从哪里调用,因为我没有得到任何堆栈跟踪.如何获取堆栈跟踪或至少查看我的代码中的失败位置(而不是库/内置例程)?

解决方法

如果发生崩溃,无论是否有调试或发布版本,都可以获得有关崩溃发生位置的信息.即使您在没有源代码的计算机上,也可以看到调用堆栈.

为此,您需要使用使用EXE构建的PDB文件.将PDB文件放在与崩溃的EXE相同的目录中.注意:即使您拥有相同的源代码,构建两次并使用第一个EXE和第二个PDB也不起作用.您需要使用使用EXE构建的确切PDB.

然后将调试器附加到崩溃的进程.示例:windbg或VS.

然后只需检查您的调用堆栈,同时还打开您的线程窗口.您必须选择崩溃的线程并检查该线程的callstack.每个线程都有一个不同的调用堆栈.

如果您已经连接了VS调试器,它将自动转到导致崩溃的源代码.

如果崩溃发生在您正在使用的库中,那么您没有PDB.你无能为力.

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...