移动平台下lua调试方法
来源:互联网 发布:河鱼软件要钱吗 编辑:程序博客网 时间:2024/05/10 02:19
移动平台下lua调试方法
听说vs有一个插件叫做vslua,可以在vs里单步lua程序,但是听试过的人说,只能对纯脚本。如果脚本里调用一个C函数,是无法从脚本代码单步到C语言代码,也无法从C语言代码单步到脚本代码。对于在MTK里构建一个lua虚拟器这种情况,也是无法单步脚本程序的。
在MTK平台下使用LUA脚本语言的调试过程是很困难的,原因是lua脚本并没有真正意义上的编译(也即没有语法检查),也没有单步调试。以下是我这几个月的总结:
注意要点:
1.细心。Lua不会帮你检查你的函数名(变量名)是否写错了。
2.好的设计。每一种语言都要设计,但在这种调试困难的环境下,设计显得更加重要。设计不好,后面改起来更困难。
如果lua程序运行出错了,调试办法如下:
1。代码里打log(也就是写到文件),根据log的内容判断程序出错的地方。
2。根据出错的现象来判断出错时调用了哪个函数,直接在函数里设置断点。例如:lua程序无法将文字显示在手机屏幕上,那么直接把断点打在gui_print_text_n语句上,看看x,y还有str有没有错。
int drawString(lua_State *L)
{
。。。
unsigned short* str = (unsigned short*)(unsigned long)lua_tonumber(L, 2);
int x = (int)lua_tonumber(L, 3);
int y = (int)lua_tonumber(L, 4);
gui_set_text_color(。。。);
gui_move_text_cursor(x, y);
gui_print_text_n(str, len);
return 0;
}
3。lua_pcall返回非0时获取出错信息。测试C代码如下:
#ifndef ARRAY_LEN
#define ARRAY_LEN(array) (sizeof(array)/sizeof(array[0]))
#endif
int test1(lua_State *l)
{
return 0;
}
int test2(lua_State *l)
{
return 0;
}
static const luaL_reg myLib[]=
{
{"test1", test1},
{"test2",test2},
};
void my_openlibs(lua_State *l)
{
int i = 0;
for (i = 0; i < ARRAY_LEN(myLib); i++)
{
lua_register(l, myLib[i].name, myLib[i].func);
}
}
int main (int argc, char *argv[]) {
int status;
struct Smain s;
int ret;
lua_State *l = lua_open(); /* create state */
if (l == NULL) {
l_message(argv[0], "cannot create state: not enough memory");
return EXIT_FAILURE;
}
//luaL_openlibs(l);
my_openlibs(l);
luaL_loadfile(l, "test.lua");
if(lua_pcall(l, 0, -1, 0)!=0)
{
const char *str;
lua_pop(l,1);
str = lua_tostring(l, 0);
status = status;
}
lua_getglobal(l,"main");
//lua_pushnumber(L, param1);
//lua_pushnumber(L, param2);
if(lua_pcall(l, 0, 1, 0) != 0)
{
const char *str;
lua_pop(l,1);
str = lua_tostring(l, 0);
status = status;
}
return 1;
}
脚本代码如下:
function main()
test1()
test2()
test3()
return 1
end
将断点设置在这一句:
status = status;
如果lua正确运行,则不会跳到这个断点上;在某些情况下运行出错,就会到这里到。那么查看str的内容就知道出错信息。
在上面例子有两个lua_pcall,第一个读取文件内容,第二个执行lua脚本的main函数。如果运行“正常”的话,程序会停在第二个“status = status;”上。查看str内容,应该是这样的:
test.lua:7: attempt to call global `test3' (a nil value).
实际上test3并没有定义,因此脚本就会报错。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wuyao721/archive/2008/10/24/3137525.aspx
- 移动平台下lua调试方法
- 移动平台下lua调试方法
- lua下的调试
- Lua 在移动平台上的应用
- Lua之实现跨平台移动开发
- 在VS2010平台下实现Mex程序的调试方法
- Android/linux 平台下使用 i2c-tools调试IIC方法
- visual studio下调试lua
- 移动平台驱动器模块调试笔记
- 移动网页开发调试方法
- 移动端真机调试方法介绍
- Windows平台下的C++调用Lua
- Windows平台下LUA环境的搭建
- Windows平台下的C++调用Lua
- Lua语言在移动iSO平台上成为新宠
- android平台下lcd调试
- 移动平台驱动调试流程(一)--P1调试阶段
- 移动平台驱动调试流程(二)--外设调试阶段
- seo知识
- 数据恢复(4):windows系统的动态磁盘卷LDM
- MYSQL主从服务器配置
- myeclipse的功能优化
- RMAN 'Duplicate Database' Feature in 11G [ID 452868.1]
- 移动平台下lua调试方法
- LED发光字制作过程
- 动态管理视图和函数
- 防止任何在模态对话框中回发服务器的操作都会再开一个新页
- db2日志管理(完成)
- Security Delivery Specialist (Japanese) 职位招聘
- UserProfile - Property Not Editable
- jxl实现导出excel
- 事务嵌套的规则