使用VS2010调试代码时遇到的一个奇怪的问题

a220315410 2011-03-18 06:57:07
这是一小段基于GDI+的贴图代码,代码没有错误,可以正常运行,也能在界面上看到正确的结果。
BOOL CALLBACK TestDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
{
RECT rc;
GetWindowRect(hWnd,&rc);
OutputDebugString(_T("I am TestDlgProc, I receive WM_INITDIALOG, so I has been created !\n"));
GdiplusStartupInput gdiStartupInput;
GdiplusStartup(&m_gdiplusToken,&gdiStartupInput,NULL);
}
break;
case WM_DESTROY:
{
GdiplusShutdown(m_gdiplusToken);
}
break;
case WM_PAINT:
{
RECT rc;
GetWindowRect(hWnd,&rc);
Image img(_T("res\\003.gif"),TRUE);
Graphics graphics(hWnd,TRUE);
const PointF p(10,10);
re = graphics.DrawImage(&img,p);
if(!re == Ok)
{
re = GetLastError();
WCHAR msg[100]={0};
wsprintf(msg,_T("GetLastError is>>%d<<\n"),re);
OutputDebugString(msg);
}
break;
}
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
DestroyWindow(GetParent(hWnd));
EndDialog(hWnd, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}

但是在调试的时候,遇到了一个奇怪的问题,有一部分的变量在断点调试的时候,无法看到它的值:


如图所示,hWnd,message,wParam,lParam等变量是可见的,但是WM_PAINT消息内的变量却怎么也看不到。
另外,我有试过把代码放到别的位置,例如WM_INITDIALOG消息下,就能看到变量。
这是怎么回事呢,等待高手解答~
...全文
355 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvq49 2012-09-20
  • 打赏
  • 举报
回复
是不是在每个case中都定义了int width等变量?可以尝试在运行完赋值语句后点watch窗口中value栏下末尾的刷新图标。以前在c#中也遇到过,都是在类似switch或if。。else if中定义了相同的变量,当时调试时的提示是类似变量过期之类的话,你可以试试
a220315410 2011-03-24
  • 打赏
  • 举报
回复
算了,结贴吧,反正遇到的次数也不多,暂且这样吧。
qiuxin425 2011-03-22
  • 打赏
  • 举报
回复
回复一下系统默认的设置

你可能把设置给修改了
枫桦沐阳 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ynb119 的回复:]
Image img(_T("res\\003.gif"),TRUE);

相对路径的问题吧,debug模式下用的是IDE的环境,不是你的程序环境。
改成绝对路径试试
[/Quote]
不好意思,我看错了。以为是调试出错。
那可能跟5楼说的一样。
qiuxin425 2011-03-21
  • 打赏
  • 举报
回复
你这个变量在程序下面根本没有用到,2010给优化掉了

如果你用了就可以显示了

if(width == 0)
{
......
}
qiuxin425 2011-03-21
  • 打赏
  • 举报
回复
调试版本是不是release?VS2010在release下也是可以调试的,他把一下代码优化了你就没有看到。
改成debug调试就可以啦。
枫桦沐阳 2011-03-21
  • 打赏
  • 举报
回复
Image img(_T("res\\003.gif"),TRUE);

相对路径的问题吧,debug模式下用的是IDE的环境,不是你的程序环境。
改成绝对路径试试
a220315410 2011-03-21
  • 打赏
  • 举报
回复
重新编译了,但是问题还是存在。。。
a220315410 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 visualeleven 的回复:]
Debug的时候,鼠标移动到变量的位置上可以看到值不?
[/Quote]
看不到。。。
a220315410 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qiuxin425 的回复:]
你这个变量在程序下面根本没有用到,2010给优化掉了

如果你用了就可以显示了

if(width == 0)
{
......
}
[/Quote]
不光width看不到,别的变量也不行。
a220315410 2011-03-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qiuxin425 的回复:]
调试版本是不是release?VS2010在release下也是可以调试的,他把一下代码优化了你就没有看到。
改成debug调试就可以啦。
[/Quote]
我本来就是debug版的,而且,我有确认,我没有开优化
Eleven 2011-03-21
  • 打赏
  • 举报
回复
Debug的时候,鼠标移动到变量的位置上可以看到值不?
hhh_hao 2011-03-18
  • 打赏
  • 举报
回复
这个问题我也碰到过,不知何故,重新编译应该可以解决问题
真相重于对错 2011-03-18
  • 打赏
  • 举报
回复
清理下项目,重新编译,试试

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧