游戏程序调试方法


         本来打算认真写下工作中的心得经验,但迫于精力时间有限,写了两篇后就没动力写了,难得今天有点余力,再来一篇。
         游戏是一个实时性的功能异常复杂的3D软件,需要专门的测试部门对游戏进行反复测试,我所做的这个游戏的bug编号已经接近1w了,可见游戏bug之多。游戏客户端程序一般多达几十万行代码,我相信没有一个人能了解所有的细节,碰到bug通过调试是找到问题的必由之路。
         (1)客户端调试
         程序员一般在VC环境下用代码启动程序,设置exe的工作目录work directory(包含各种游戏资源),运行时若有异常发生,在VC编译器里会自动定位到异常代码处,若显示的是汇编级别或底层代码,可通过call stack函数调用堆栈查看调用的函数,找到异常代码。其中空指针是最常见的异常。
         测试人员或其他人员直接通过exe启动程序,在运行时若有异常发生,可根据生成的dmp文件,以及pdb符号文件,查找异常位置。dmp文件是系统提供的一个功能,通过对主函数添加__TRY和__CATCH捕获程序异常,将崩溃信息写入dmp文件中。将dmp文件,pdb文件,exe文件放到同一个目录下,双击dmp文件启动VC并运行后,通过call stack可查看到异常位置。
         一般客户端还有log日志文件用于查错,查看最新的log也能找到点线索。

         在正常运行状态下,可添加断点暂停程序,查看断点位置的变量值,分析可能的错误。快捷键有F9添加断点,F10单步执行,F11单步并进入函数内部,Shift+F11跳出函数,F5跳至下一个断点,以及可以用鼠标拖拽箭头改变流程。 调试状态下,将鼠标移到变量上查看变量值, 在call stack窗口查看函数堆栈。

         若要查找某个变量的使用情况,可通过Find Result搜索所有使用位置,还可以用vc助手的Find all reference查找所有引用,以及go to definition和go to declare查找定义和声明位置。 书签bookmark也是个很有用的功能,比如要在几处代码来回复制粘贴,可在几处用ctrl+K添加书签,按F2键切换非常方便。

         (2)服务器调试
         服务器开发若是在专门的linux机器上用eclipse操作,可直接使用软件提供的调试功能。 但若是通过shell远程操作,只能使用gdb命令行调试工具,命令行调试是很不方便,但也基本够用,不是很糟糕。
         首先通过远程工具连接到服务器,启动服务端程序后,输入“ps -u 用户名”, 显示进程列表,其中包括游戏程序的进程id,比如1102。
         然后输入“gdb”, 启动gdb调试工具。
         输入“gdb attach 1102”,关联到要调试的程序。
         输入“dir /home/用户名/gamesource/xxx/xxx”,设置要调试文件所在的目录。
         输入“break xxx.cpp:200”,在xxx.cpp文件的第200行添加一个断点。
         输入“c”,恢复程序运行。
         客户端连接服务器程序,并触发该断点,gdb会自动在断点处停下。
         输入“list”,查看断点处代码。
         输入“bt”,查看函数堆栈。
         输入“p m_nIndex”,查看变量的值。
         输入“n”,单步执行。
         输入“c”,继续执行。

         gdb最蛋疼的一处就是如果没有触发断点,那么在命令行里就无法再输入命令,只能先kill掉,再重新设置。

转载于:https://www.cnblogs.com/cats/archive/2011/11/30/2268487.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值