关于cocos2dx程序的BUG调试解决方案

今天说一下手机游戏开发的调试问题吧。不得不说的是和PC平台游戏、软件开发相比,手机上开发游戏和软件要困难的多。原因是多方面的,比如说开发环境比较复杂,工具软件不够人性化等等。

cocos2dx的出现解决了一个很大的问题,因为他是跨平台的,相对来说windows的软件开发环境比较友好,对中国程序员来说更熟悉。这样可以在windows进行日常开发和调试,然后在发布到其它平台的时候进行少量的处理就好了。

cocos2dx程序的调试,在windows下和端游类似,可以在后台窗口进行打印,也可以直接在vs中挂断点进行跟踪。相对还是比较容易。唯一需要优化的是把后台打印日志导出,以方便根据日志进行分析。

但是在windows环境OK之后,需要发布到Android平台的时候,就有些麻烦了,顺利运行还好,一旦在运行的过程中出现问题,那再来调试就相当的麻烦了,模拟器满如蜗牛,Esclipe本身支持也不够强大。有时候可能只是一句脚本报错,但是要发现问题缺要费九牛二虎之力。要是在真机上运行出错,那就更加不好跟踪问题了,还需要用到USB调试功能。今天的主要话题就是针对这种情况,提供几个好的方法来方便我们进行游戏开发。

1、后台打印日志的优化。

windows下已经有后台日志查看功能,但是大家可能会发现一个问题,后台显示有行数的限制,超过多少行之后就看不到了,但是cocos2dx的输出是相当多的。怎么办?解决方案就是输出log文件。把后台显示的内容输出后,我们可以直接分析log文件。下面提供lua的解决代码,用C++的同学可以自己改造。

首先,封装一下lua的文件处理功能,比较简单,而且后面的方法可能也需要使用。

--file.lua
--定义lua文件操作的方法
--打开文件:参数(文件名,打开模式),返回文件句柄或nil
function openFile(filename, mode)
	local f = io.open(filename,mode)
	if f then
		return f
	else
		return nil
	end
end
--读取文件全部内容:参数(文件句柄),返回一个string
function readAllFile(f)
	return f:read("*all")
end

--读取文件一行内容:参数(文件句柄),返回一个string
function readLineFile(f)
	return f:read("*line")
end
--写文件内容:参数(文件句柄,字符串)
function writeFile(f, ...)
	local arg = {...}
	f:write(unpack(arg))
end
--关闭文件,参数(文件句柄()
function closeFile(f)
	f:close()
end

然后,我们要改写print函数和cclog函数,将这些内容输出到文件。

local print_raw = print
-- print
print = function(...)
    require "base.file"
    print_raw(string.format(...))
    local file = openFile("client.log", "a")
    if file then
	writeFile(file, string.format(...).."\n")
	closeFile(file)
    end
end
-- cclog
cclog = function(...)
    print(string.format(...))
end
-- for CCLuaEngine traceback
function __G__TRACKBACK__(msg)
    print("----------------------------------------")
    print("LUA ERROR: " .. tostring(msg) .. "\n")
    print(debug.traceback())
    print("----------------------------------------")
end

这样,所有在lua里面的打印信息都会输出到日志文件方便我们分析了。

2、上面这个方法已经能够让我们分享日志,那还有没有更好的方法呢?如果我是在安卓手机上运行,我要查看日志是不是很不方便呢?

那我们就更进一步,我们不是把日志输出到文件了吗?那我们直接在游戏里面查看日志不是更方便?所以我们的思路是,在游戏中写一个日志显示界面,然后把日志文件内容一行一行读出来,让他显示在一个RichText控件里面。这样是不是更方便呢?这个方法我暂时没时间写,不过肯定没问题的,有时间写好后补上代码。

3、方法2已经能够及时的看到日志了,我们还可以使用更强大一点的方法,我们可以建一个日志服务器,客户端在输出日志的时候就发送到日志服务器,这样真机测试就很方便了,和在windows开发很相似了,不过这个方案有点重了,大家使用第二点应该就可以了。

好了,上面推荐的这三种方案应该能够解决大部分的调试问题了,再也不用为了看日志去启动麻烦的模拟器了。

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)

关于cocos2dx程序的BUG调试解决方案

时间: 2024-08-24 06:04:55

关于cocos2dx程序的BUG调试解决方案的相关文章

论 BUG调试与(程序猿)初学者

作为一枚程序猿,BUG调试是最基本的技能,对于初学者更是重中之重.个人而言,要想为自己的程序猿生涯更上一层楼,就得知道什么是BUG调试,而且还必须知道怎么调好BUG.那么BUG究竟是什么呢?在我之前的一篇关于BUG的论述<朋友,请待你的朋友--BUG好一点!>已经说得很清楚了.BUG作为一类寄生于程序猿体内的"昆虫",其实它并不可怕.可怕的是,当我们捕获一只BUG时却不知怎么处理它. 1.对于HTML/CSS而言,如果页面布局出现了BUG,一般而言,这类BUG的攻击力最低.

关于cocos2dx客户端程序的自动更新解决方案

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 随着手机游戏的不断发展,游戏包也越来越大,手机网络游戏已经超过100M了,对于玩家来说,如果每次更新都要重新下载,那简直是灾难.而且如果上IOS平台,每次重新发包都要审核,劳神费力.所以当前的主流手游都开始提供自动更新的功能,在不改动C++代码的前提下,使用lua或者js进行业务逻辑开发,然后自动更新脚本和资源,方便玩家也方便研发者. 以前做端游的时候,自动更新是一个大工程,不仅要能更新资源和脚本,还要

Bug调试(lldb)

原文网址:http://www.cnblogs.com/Twisted-Fate/p/4760156.html 今天博主有一些Bug调试的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. Xcode的Bug调试方法大概有以下几种: 1.断点,全局断点,条件断点配合Nslog找出Bug 2.静态分析工具:Analyze,静态检测内存 3.动态分析工具:Profile,其中最常用的是Leaks(检测内存泄露)和Allocations(检测内存溢出) 4.gdb调试:Xcode4.0之前的调

Android之——常见Bug及其解决方案

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46942139 1.android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 解决方案:将getApplication改成xxxx.this 2.call you are unregister onbrocastRevicer?

做一个懒COCOS2D-X程序猿(一)停止手打所有cpp文件到android.mk

前言:"懒"在这里当然不是贬义词,而是追求高效,拒绝重复劳动的代名词!做一个懒COCOS2D-X程序猿的系列文章将教会大家在工作中如何偷懒,文章篇幅大多较短,有的甚至只是几行代码,争取把懒发挥到极致! 一.懒人说书 Android.mk中LOCAL_SRC_FILES需要罗列出所有参与编译的文件,这样在.cpp文件少的时候还可以一个一个添加,当有几百个文件的时候会十分的痛苦! 我们下看看TestCpp工程中的Android.mk文件: 这只是节选的一部分,大概只有50个左右吧,除数量多

VS中无法加入断点进行调试解决方案

原文地址:http://blog.csdn.net/gukesdo/article/details/6535054 [ 1] 以前也遇到过同样的问题,但没有问个为什么,也没有探个毕竟.昨天调试一个DLL,添加输出信息吧,太麻烦而且不轻易定位,  但设置断点后按“F5”,断点不可用,气泡提示“当前不会命中断点,还没有为该文档加载任何符号.  ”再右键->“位置”->“答应源代码与原始版本不同”,还是不行.77777我还不信了,整它!  后来才发现,“Alt+F7”->“配置属性”->

C#的Web开发程序监控及调试

C#的Web开发程序监控及调试 简介:在我们整个程序研发的人生路上,经常会碰见到的情况. 例如:面试到一个新的公司,面临一套新的网站, 随之而来的肯定我们需要对这一套新的网站进行维护, 这就面临着你需要对以前的代码监控和调试以进行维护, 你维护的代码会涉及到已离职员工的,在职你同事的等等, 那面对这么多不同框架,不同风格,不同层次人士的代码的时候, 我们怎么快且准的进行高质量有效地监控和调试呢? 本文将要讲述的就是在c#中Web开发的程序监控及调试, 下面我将以一个EOP订单Web打印的界面

使用BabeLua在cocos2d-x中编辑和调试Lua

使用BabeLua在cocos2d-x中编辑和调试Lua BabeLua是一款基于VS2012/2013的Lua集成开发环境.具有Lua语法高亮.语法检查,自己主动补全.高速搜索,注入宿主程序内对Lua脚本进行调试,设置断点观察变量值.查看堆栈信息等功能. 怎样安装BabeLua 请參考<系列1-BabeLua入门> 设置Cocos2d-x项目 在VS菜单上选择:[lua][Settings]打开设置界面,例如以下图(左上角选中[Lua?Folder]) ? 如上图分别设置: (1)Lua?s

mac 无法连接android手机进行调试 解决方案

第一步: 查看usb设备信息 在 终端输入:system_profiler SPUSBDataType     可以查看连接的usb设备的信息 比如我的usb信息如下(部分内容): Android: Product ID: 0x2769              Vendor ID: 0x22d9              Version: 2.31              Serial Number: 6e5d48a4              Speed: Up to 480 Mb/sec