有时我的c程序在调试模式下崩溃,我得到的是一个消息框,说明某些内部内存管理例程中的断言失败(访问未分配的内存等).但我不知道从哪里调用,因为我没有得到任何堆栈跟踪.如何获取堆栈跟踪或至少查看我的代码中的失败位置(而不是库/内置例程)?
解决方法
如果发生崩溃,无论是否有调试或发布版本,都可以获得有关崩溃发生位置的信息.即使您在没有源代码的计算机上,也可以看到调用堆栈.
为此,您需要使用使用EXE构建的PDB文件.将PDB文件放在与崩溃的EXE相同的目录中.注意:即使您拥有相同的源代码,构建两次并使用第一个EXE和第二个PDB也不起作用.您需要使用使用EXE构建的确切PDB.@H_502_7@
然后将调试器附加到崩溃的进程.示例:windbg或VS.@H_502_7@
然后只需检查您的调用堆栈,同时还打开您的线程窗口.您必须选择崩溃的线程并检查该线程的callstack.每个线程都有一个不同的调用堆栈.@H_502_7@
如果您已经连接了VS调试器,它将自动转到导致崩溃的源代码.@H_502_7@
如果崩溃发生在您正在使用的库中,那么您没有PDB.你无能为力.@H_502_7@