Bug经典回放(二)

continue....

二)今年最经典的bug。
准确的说。我还不知道这个是谁的bug。bug的发现是源于给别人做的一个外包程序。
这是一个OpenGL应用程序。初始化代码是我写于2001年。并且一直沿用到现在的代码。可以所是酒精考验了。我从来没有怀疑这样的代码会出现问题。症状如下:
该程序在以前的机器上没有什么问题,运行十分流畅而且也非常稳定。年初突然接到朋友报告说,程序在新的机器上出现了问题。速度很慢,约为10几秒才更新一次画面。我严重的不相信。但是事实总是事实。于是我开始检查OpenGL的驱动。显卡是Nvidia的GeForce 7300Go。驱动也是最新的。而我当时开发的时候显卡是5600。后来调试的时候也在6600上顺利运行。。。。。 
    把framebuffer和摄像头的数据保存下来后,发现数据竟然都是对的。更新都是实时的。debug viewer打印出来的信息也表示我的程序以fps30的速度正常运行。问题似乎陷入了绝境。我也进入了幻觉状态。无奈只好背着那台出问题的笔记本回家了(笔记本是很不错的笔记本哦~_~)。
   一个礼拜,实在想不错问题。两个礼拜快过去了。还是没主意。突然有一天一个朋友要拷贝我的一个场景编辑器。于是我就把那个编辑器重新编译了一下。神奇的事情来了。几个月前在同样的一台机器上还好好的编辑器。竟然也出现了相同的问题!!!!!
   该死的Driver. 于是我把driver还原到7x.xx版本。问题果然好了。。。。那么问题显然出在了OpenGL相关的代码上。。。
   检查一下以前的OpenGL程序是这么写的。
    HDC hDC = GetDC(m_hwnd);
   ChoosePixelFormat(hDC ,pixel_format);
   Release(hDC);
   .......

  HDC hDC = GetDC(m_hWnd);
  SwapBuffer(hDC);
  Release(hDC);
  ......

  HDC hDC = GetDC(m_hWnd);
  glMakeCurrent(hRC, hDC);
  Release(hDC);

  怀疑这里是不是hDC没有保存的问题。以前因为老师说hDC是很宝贵的资源。所以每次我用完了就还给Windows了。于是把hDC保存起来。问题解决!!!!!

反思:
    即使是经历了几年。程序的bug也是会潜伏下来的。今天正常的程序,明天也许就不正常了!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值