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
{
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
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
}
若这次成功了,那你得考虑一下编译器生成的代码有误了
从394跳到了651
如果i是int就没有这个问题
OnDraw(CDC* pDC)只要刷新窗口就会被执行,
所以可能在短时间内执行多次
而TRACE是个相对较慢的操作,如果用long int可能还有一个类型转换的问题
速度更慢,TRACE来不及完成于是跳过了一些输出
把long int i;改成int i;试试
还有跳过的数字也是随机的,估计跟当时电脑的状态有关吧。
总之就是trace函数来不及输出这么多东西,或者怕占用太多系统资源所以自动忽略了部分输出
看看运行了几次?
char szBuffer[256];
for (int i = 0; i < 800; i++)
{
sprintf(szBuffer, "%d\n", i);
OutputDebugString(szBuffer);
}