VC6 + sp5, 一直用着没问题,这两天突然一下就这样了,vc7.1同时也出这样的问题,在调试的时候,在任何一个函数上下断点,F11跟进去的时候都会弹这个消息,程序肯定没问题,我写了个测试代码(如下),是个win32 console程序,用和不用MFC我都测过了,都一样,跟进Func1函数时就弹这个消息了,接着就进入了汇编模式,当前代码是int 3, 在我的工程里面,有的函数中断后(同样的消息),继续按F10还是弹这个消息,n多次都没办法进这个函数,无法再调试了,我重装了vc6,vc7都没用,又不想重装系统。在网上找了很久,但大多数是说代码有问题,一般来说指针越界什么的,但下面这段代码没看见哪有问题啊?哪位好心的大侠能帮我解决这个问题啊,郁闷好几天了int Func1 (int a, int b)
{
return (a+b);
}int main(int argc, char* argv[])
{
int a, b, c=0;
a = 5;
b = 7;
c = Func1 (a, b);  // 在这里下断点,F11跟进函数
printf ("%d\n", c);
return 0;
}

解决方案 »

  1.   

    在release版本下没问题,只是不能调试 // 不能调试好郁闷啊
      

  2.   

    是不是装了什么其他软件中了招,还是中病毒了。
    这个以前也见过,是装了softice有冲突。
      

  3.   

    这是消息弹出后出现的汇编窗口,黄色箭头指向0040101F,也就是int 3,按道理应该是00401020啊0040101F   int         3
    --- E:\Workspace\Test\t5\t5.cpp  -------------------------------------------------------------------------------------------
    1:    // t5.cpp : Defines the entry point for the console application.
    2:    //
    3:
    4:    #include "stdafx.h"
    5:
    6:    int Func1 (int a, int b)
    7:    {
    00401020   push        ebp
    00401021   mov         ebp,esp
    00401023   sub         esp,40h
    00401026   push        ebx
    00401027   push        esi
    00401028   push        edi
    00401029   lea         edi,[ebp-40h]
    0040102C   mov         ecx,10h
    00401031   mov         eax,0CCCCCCCCh
    00401036   rep stos    dword ptr [edi]
    8:        return (a+b);
    00401038   mov         eax,dword ptr [ebp+8]
    0040103B   add         eax,dword ptr [ebp+0Ch]
    9:    }
    0040103E   pop         edi
    0040103F   pop         esi
    00401040   pop         ebx
    00401041   mov         esp,ebp
    00401043   pop         ebp
    00401044   ret
      

  4.   

    在调试程序中遇到提示“user breakpoint called from code at 0x......(地址)”时,这并不一定是因没用户设置了断点的关系,而是因为系统执行了一个硬编码断点操作(hard coded breakpoint instruction)。例如在Windows NT下当正被调试的应用程序获得焦点时,如果F12键按下,则Windows NT调用一个类似于DebugBreak()函数的函数,这个被调用的函数执行一个hard coded breakpoint instruction,于是调试器捕捉到这个操作产生的例外,所以中断并给出上述的提示(User breakpoint called from code at <address>)或者是给出Break caused by hard coded breakpoint instruction.,在这样的情况下,只要让调试继续进行即可(按下F5键)。值得注意的是当程序涉及到全局性的共享内存(对象)时,如CShareFile,这些对象维护着一个全局性的内存块,如果因为程序的疏忽对仍然锁定的对象(locked object)进行释放内存的话,则在NT下也会出现User breakpoint called from code at <address>这样的提示。此外,在低版本的Visual C++调试器中,在不少地方(例如一些有关打印设备的操作)都用到GlobalLock,编程不当也会导致上述的提示出现,不过在win32中,很多这样的调用已经不再必要了。
      

  5.   

    你通过attach process的方式看看,是不是在.exe的opt或者在其他的MFC DLL中设置了断点。不过这个没什么关系的。只是老是打断你的调试。