离奇的 debug 经历...之二
来源:互联网 发布:烛影斧声 知乎 编辑:程序博客网 时间:2024/05/16 08:44
离奇的Debug经历之二(DX2D平台下.)
代码编译没问题,但是,程序exe一启动就失败.
可能原因.代码确实是没有问题.但可能代码的输入参数出了问题,也就是,读取外部配置文件做了改动之类的.
描述,在一次动动代码的情况下,看了一会书,再去打开编译过的exe文件,断言错误.!说一个D3D的设备句柄为空.
Debug经历:跟据断言错误提示窗口,定位到断言的位置(具体定位到那一行),发现一个设备句柄为空.
在该行设断点.F5运行到该断点.
双击pDevice句柄,CTRL+ALT+Q查看变量的值为0!!,的确为空.
加入
if(!pDevice)OutputDebugSring("pDevice is null");也输了出来.
看来设备句柄真的为空.
再来查看Call Stack栈.发现上一个函数Graphics类的函数.
进入该函数,单步调试,,可能是太粗心,没有发现什么可疑的.
请高手来调试,,只知道,,设备为空是因为创建设备失败了.但是怎么失败了,在哪里失败了,没有人知道.
因此,浪费了一下午时间.
晚上新员工培训,培训可没意思,于是自己开始认真的思考这个问题.
思路如下:
pDevice为空.由于pDevice是通过Graphic->GetDevice()得到的.所以,GetDevice()返回的那个值也为空,也就是Graphics内部维护的变量m_pDevice也为空.那么m_pDevice是在什么时候被创建的呢?既然那个时候都创建失败了,为何不早早的就提示失败呢?
带着这些疑问,开始查找m_pDevice相关信息.
进入到Graphics.cpp文件,CTRL+F,查找"m_pDevice",发现了如下东东,
hr = m_pDirect3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL, m_hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING, &m_PresentParameter, &m_pDevice);
if(FAILED(hr))
{
// :出错后,该信息被存到txt里面,使得,发布为release后,也能方便的定位错误的位置!!!
SYSLOG("******ERROR! Can't create Direct3D device.");
return false;
}
分析发现,上边语句也真的没有错误,但是程序的确是从这里出现了错误,单步执行了发出,前面没有错误...
这就纳了闷了,忽然想起来了,之前自己有改过游戏的脚本的配置,是不是脚本改出了问题,,,,敢赶紧查看,,结果如下,
ClientWidth = 800 // 800*600是整个游戏框架大小,虽然框加图片是1024*768的,但是
//游戏也自动调整画图大小.
ClientHeight = 600
最后事实证明,由于该脚本不支持单独一行的注释,我的第二行,用了单独一行的注释,所以为会错...........!!!
- 离奇的 debug 经历...之二
- 记录下我的所有离奇的非技术问题的debug经历
- 一次离奇的项目维护经历
- 恢复9.10Grub引导过程的离奇经历以及解决方法
- 我的CSDN成长经历之二
- 面试经历之二
- “一大”代表包惠僧de离奇经历
- 离奇的一天
- 馒头离奇的一生
- 离奇的陶醉 1
- 离奇的陶醉 2
- 史上最冷最离奇的杀人案件
- 离奇的倒霉哦
- 一次随机crash的debug经历
- 记一次debug经历,基础的重要性
- 我所经历的汶川大地震之二
- 我的学习经历之git(二)
- 一个苏州IT人的5年挨踢经历-------面试,薪资,企业,经历全方位揭示(之二)
- java程序的递归算法,列出某个目录下的所有子目录和文件
- 关于VS2003IDE的使用技巧大全 之(二)
- 链表的综合操作(重新整理,模块一点)
- CButton
- 给新入市股民几点建议!
- 离奇的 debug 经历...之二
- 为何WindowProceduer是由Windows调用
- 数据操作基类
- 让人感觉温暖的歌曲已经难得听到了
- 在GridView控件里全选CheckBox
- 类
- firefox的缺陷 2007-04-13
- ListCtrl
- www.vTalkback.com被各搜索引擎收录的情况 2007-04-14