初次研究cocos2d-x,

cocos2d-x支持lua是一个很不错的功能,使用lua来开发有个最大的好处就是不用每次改了游戏代码都编译,大多数情况下改了脚本直接运行程序就可以了,发布更新时也不用更新主程序。

同时也有个弊端,就是有能像vc那样加断点,所以为了debug方便,仅仅用控制台输出是不够的,如果能把日志保存下来并且有颜色区分,信息过略自然更好。

我的想法是用debugview来捕获cocos2d-x项目的debug信息。。

于是今天就研究了一下HelloLua这个例子,它是用控制台输出信息的,显示不能满足我的要求。。有没有办法通过lua的调用打印debug信息呢?

打开"..\samples\Lua\HelloLua\Resources"下的hello.lua文件

-- for CCLuaEngine traceback
function __G__TRACKBACK__(msg)
print("----------------------------------------")
print("LUA ERROR: " .. tostring(msg) .. "\n")
print(debug.traceback())
print("----------------------------------------")
end local function main()
-- avoid memory leak
collectgarbage("setpause", )
collectgarbage("setstepmul", ) local cclog = function(...)
print(string.format(...))
 end
require "hello2"
cclog("result is " .. myadd(, )) --------(后面代码非重点,忽略。。。)-------
end xpcall(main, __G__TRACKBACK__)

发现控制台里面的信息是用cclog来输出的,可是我怎么用debugview捕获不了呢?

找了许久,找到了cocos2d-x和lua的关键字映射源码“\scripting\lua\cocos2dx_support\LuaCocos2d.cpp”,搜索了一下,只搜到了"CCLuaLog"函数,怎么都搜不到cclog。。

用CCLuaLog在lua里面试了一下,可以捕获到debug信息,可为什么用cclog不行呢?在vc里面试一下cclog也是可以捕获到的。。

这时我怀疑lua里面调用的cclog可能是重写过的,因为CCLuaLog不支持"..."参数,正在百思不解的时候,我又重新仔细看了一下hello.lua脚本,这时才发现我犯傻了。。

 local cclog = function(...)
print(string.format(...))
end

其实cclog只是在lua里面自定义的输出函数。。。只是把名字取为cclog,我的个去。。。

如果想要输出debug信息,只是需要把这段代码改为如下代码即可:

local cclog = function(...)
CCLuaLog("cocos2dx-->"..string.format(...))
end

cocos2d-x的helloLua例子函数名定义误导初学者的更多相关文章

  1. php function 定义时函数名前加&符号的意义

    看了很多帖子,但是都不能理解,又去看了很多资料,终于名白了.记下备忘. 问题:php在声明函数时,函数名前面的&符号有什么用? 一直想不通.很多帖子说类似于变量的$a=&$b,但是$b ...

  2. 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针

      您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...

  3. JS函数 函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名。

    函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名. 第一种情况:在<script>标签内调用. <script type="text/java ...

  4. C++ 回调函数的定义与用法

    一回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函 ...

  5. C/C++函数调用的几种方式及函数名修饰规则以及c++为什么不允许重载仅返回类型不同的函数

    我们知道,调用函数时,计算机常用栈来存放函数执行需要的参数,由于栈的空间大小是有限的,在windows下栈是向低地址扩展的数据结构,是一块连续的内存区域.这句话的意思是栈顶的地址和栈的最大容量是系统预 ...

  6. C++编译器的函数名修饰规则

    我们知道在C++中有函数重载这样一个东西,当我们定义了几个功能类似且函数名是一样的函数的时候,只要它的参数列表不同,编译是可以通过的,但是在C中是不可以的. double add(double a, ...

  7. C语言函数名与函数指针详解

    一.通常的函数调用 一个通常的函数调用的例子: /* 自行包含头文件 */ void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */ int main(in ...

  8. 在C语言中以编程的方式获取函数名

    仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧. 对象反射库.调试工具及代码分析器,经常会需要在运行时访问 ...

  9. Python函数的定义、参数传入与函数的调用

    作为计算机代码的一种抽象方式,函数在Python中扮演了极为重要的角色.今天给大家介绍Python函数的定义.参数的传入以及调用方式.其中函数参数的传入方式为本节重点内容.Python函数的参数形式包 ...

随机推荐

  1. CSRF手工测试方法

    CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF.一般来说 ...

  2. spoj 2148

    看似很水  却wa了好多遍   spoj上果然没有一下可以水过去的题....... #include<cstdio> #include<cstring> #include< ...

  3. uva 10069

    简单的dp 但是一个大数加法  套用了末位大牛的类模板 #include <cstdio> #include <cstring> #include <algorithm& ...

  4. 1988-B. 有序集合

    描述 在C++里,有一个神奇的东西,叫做STL,这里提供了很多简单好用的容器,用来实现常用又很难书写的数据结构,如栈(stack)等.其中,有一个容器叫set,译作“有序集合”.首先,这是一个集合,所 ...

  5. URAL 1012 K-based Numbers. Version 2(DP+高精度)

    题目链接 题意 :与1009一样,不过这个题的数据范围变大. 思路:因为数据范围变大,所以要用大数模拟,用java也行,大数模拟也没什么不过变成二维再做就行了呗.当然也可以先把所有的都进行打表,不过要 ...

  6. CF 369 B. Valera and Contest

    http://codeforces.com/contest/369/problem/B 题意 :n, k, l, r, sall, sk,n代表的是n个人,这n个人的总分是sall,每个人的得分大于 ...

  7. POJ2739Sum of Consecutive Prime Numbers

    http://poj.org/problem?id=2739 题意 :一个正整数能够表示为一个或多个连续素数和,给你一个正整数,让你求,有多少个这样的表示.例如:整数53有两种表示方法,5+7+11+ ...

  8. Python高级特性

    比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: 这是正确的姿势

  9. Sqlmap基础(二)

    sqlmap.py -r req1.txt --dbms Oracle --risk

  10. P137、面试题23:从上往下打印二叉树

    题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入如图的二叉树,则依次打印出8,6,10,5,7,9,11.(其实是按层遍历)二叉树结点的定义如下:struct Bin ...