当前位置:  开发笔记 > 编程语言 > 正文

用户断点无处可去

如何解决《用户断点无处可去》经验,为你挑选了1个好方法。

我正在调试MS VC++ 6.0中的一些代码.出于某种原因,在我想要删除一些动态分配的内存的某个点上,它会中断并且我得到一个弹出消息框,说"用户断点从代码中调用等等",然后出现反汇编窗口,然后我弹出看到

*memory address* int      3

奇怪的是,代码中有NOWHERE,我正在调用这样的汇编指令(我认为asm int 3是x86的硬件中断命令?)..

可能是什么导致了这个?

编辑:答案:我的代码是"走出末端"的数组,但只在Visual Studio调试标记的位置使用0xFDFDFDFD,这被称为NoMan'sLand栅栏..我认为它也称为Off-by-一个错误..这个数组与我在发生错误时释放内存的点无关.这使得发现更难.. :(



1> Michael Burr..:

您可能在已发现堆损坏的调试堆例程中遇到代码.

当你击中Int 3时,调用堆栈是什么样的?

编辑:基于注释中的堆栈跟踪,例程_CrtIsValidHeapPointer()表示被释放的指针是坏的.以下是来自MSVC的DBGHEAP.C源码的代码片段:

    /*
     * If this ASSERT fails, a bad pointer has been passed in. It may be
     * totally bogus, or it may have been allocated from another heap.
     * The pointer MUST come from the 'local' heap.
     */
    _ASSERTE(_CrtIsValidHeapPointer(pUserData));

pUserData 将是您要删除的指针的值.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有