我有一个加载DLL的应用程序,随后崩溃。我将IDE的工作目录修改为解决方案构建目录,以便我可以在构建的DLL上运行调试器,该DLL是从此解决方案中的另一个项目构建的。当应用程序获得访问冲突时,我可以看到当前函数,但没有调用堆栈,并且没有任何本地人会评估。我已经检查过这个目录中有调试器符号,它都是在调试模式下构建的。可能是调试器失败的原因是什么?
编辑:如果我放置一个断点,那么调试器工作正常 - 当然,这仍然没有告诉我为什么应用程序崩溃,但我确实得到一个调用堆栈,所有符号将很乐意评估。
答案 0 :(得分:4)
调试器在遇到断点时工作,在本机代码中的访问冲突后中断时失败,通常表明访问冲突在堆栈损坏之前或之后。
调试器依赖于正确设置的堆栈中的某些值,以便它既可以构建正确的堆栈视图,也可以访问局部变量。如果此数据已损坏,则可以防止显示本地人和生成堆栈的准确图片。
如果您在访问冲突之前达到了断点,则堆栈仍处于完好状态,调试器可以自由查看信息。