void CMy23443423View::OnDraw(CDC* pDC)
{
CMy23443423Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
long int i;
for(i=0;i<800;i++)
TRACE("i=%d\n",i);
// TODO: add draw code for native data here
}
调试输出时为何只输出到391,然后一下跳到575?不过要是按F10单步执行可以连续输出,
此问题已困扰我多日,请各位高手不吝赐教.先谢了.
output:i=387
i=388
i=389
i=390
i=391
i=575
i=576
i=577
i=578

解决方案 »

  1.   

    试试把
    for(i=0;i<800;i++)
    TRACE("i=%d\n",i);
    换成
    __asm
    {
         xor eax, eax
         mov  i, eax     
    }
    Label1:
         TRACE("i=%d\n",i);
    __asm
    {
         inc   i
         cmp   i, 800
         jl    Label1
    }
    若这次成功了,那你得考虑一下编译器生成的代码有误了
      

  2.   

    我试了你的代码,
    从394跳到了651
    如果i是int就没有这个问题
      

  3.   

    我猜测是这个原因:
    OnDraw(CDC* pDC)只要刷新窗口就会被执行,
    所以可能在短时间内执行多次
    而TRACE是个相对较慢的操作,如果用long int可能还有一个类型转换的问题
    速度更慢,TRACE来不及完成于是跳过了一些输出
    把long int i;改成int i;试试
      

  4.   

    可是,换成int i还是不行啊!!!!
      

  5.   

    我这里换成int有时行有时不行
    还有跳过的数字也是随机的,估计跟当时电脑的状态有关吧。
    总之就是trace函数来不及输出这么多东西,或者怕占用太多系统资源所以自动忽略了部分输出
      

  6.   

    我试了你的代码,一切输出正常呀!ft。。在你的ondraw里设一个静态记数变量,
    看看运行了几次?
      

  7.   

    这是API函数OutputDebugString的原因,当输出过快时,OutPut窗口有些信息就不显示了,什么原因我也不清楚,不过你们可以随便在哪个地方试试下面代码,也是一样的:
    char szBuffer[256];
             for (int i = 0; i < 800; i++)
    {
    sprintf(szBuffer, "%d\n", i);
    OutputDebugString(szBuffer);
    }