有时我的 C++ 程序在调试模式下崩溃,我得到的是一个消息框,指出某些内部内存管理例程(访问未分配的内存等)中的断言失败。但我不知道它是从哪里调用的,因为我没有得到任何堆栈跟踪。如何获取堆栈跟踪或至少查看代码中失败的位置(而不是库/内置例程)?
如果发生崩溃,无论您是调试版本还是发布版本,都可以获得有关崩溃发生位置的信息。即使您使用的计算机没有源代码,您也可以看到调用堆栈。
为此,您需要使用通过 EXE 构建的 PDB 文件。将 PDB 文件放在与崩溃的 EXE 相同的目录中。注意:即使您有相同的源代码,构建两次并使用第一个 EXE 和第二个 PDB 也不起作用。您需要使用通过 EXE 构建的确切 PDB。
然后将调试器附加到崩溃的进程。示例:windbg 或 VS。
然后只需检查您的调用堆栈,同时打开您的线程窗口。您必须选择崩溃的线程并检查该线程的调用堆栈。每个线程都有不同的调用堆栈。
如果您已经连接了 VS 调试器,它将自动转到导致崩溃的源代码。
如果崩溃发生在您正在使用的库内,而您没有该库的 PDB。你无能为力。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)