Cocos2d 调试

Posted luaide

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cocos2d 调试相关的知识,希望对你有一定的参考价值。

准备工作

调试代码下载

生成调试配置

这里很多同学出现过一个问题,就是同时下载了很多的lua 调试插件,所以这里需要注意 如果使用luaide进行lua调试,
需要先禁用或卸载其他的lua调试插件.
步骤:

  1. 如果你没有生成过调试配置 那么先生成
    技术分享
    演示

    技术分享
    演示

    技术分享
    演示

    技术分享
    演示
  2. 如果你已经有调试配置了可修改/删除工作目录下的.vscode/launch.json
  3. 根据调试需要选择本地或者远程调试即可

参数说明

参数说明:

launch 本地调试

{
    "name": "Cocos2-launch",
    "type": "lua",
    "request": "launch",
    "runtimeType": "Cocos2",
    "localRoot": "${workspaceRoot}",
    "mainFile": "scripts/main.lua",
    "port": 7003,
    "exePath": "E:\\editor\\quick-2.2.6\\player\\win\\player.exe",
    "printType": 1
}
  1. name:命名调试器选择项名字
    技术分享
    演示
  2. type: 默认配置不需要修改
  3. request:默认配置不需要修改
  4. runtimeType:默认配置不需要修改
  5. localRoot: 等同于 cocos 中的 workdir 用来告诉cocos运行程序,工作目录是哪一个 提供两种方式

    1. ${workspaceRoot} 的相对路径

      1. 如果你直接拖入vscode的就是 工作目录那么 直接填写 ${workspaceRoot}

        技术分享
        演示
      2. 如果你拖入的只是工作目录中的一个文件夹 那么通过/.. 对于的层级进行设置

        技术分享
        演示.png
    2. 填写绝度路径(不推荐)
      1. 技术分享
        演示.png
  6. mainFile:启动的lua 文件 该配置和 localRoot 配合使用 以localRoot为根目录 进行相对路径填写
    1. 例1: 启动文件在 localRoot 的 src 目录名字为 main.lua --> src/main.lua
    2. 例2: 启动文件在 localRoot 的 scripts 目录下文件名为 game.lua --> scripts/game.lua
  7. port: 调试端口 和 调试代码中的端口统一即可 无特殊需求
  8. exePath:执行的exe文件路径 例如:E:/cocos/player/player.exe
  9. printType: print打印方式
    1. 控制台和系统输出
    2. 控制台输出
    3. 系统输出

attach 远程调试

{
    "name": "COCOS(remote debugging)",
    "type": "lua",
    "request": "attach",
    "runtimeType": "Cocos2",
    "localRoot": "${workspaceRoot}",
    "port": 7003,
    "printType": 1
},
  1. name:命名调试器选择项名字 同上
  2. type: 默认配置不需要修改
  3. request:默认配置不需要修改
  4. runtimeType:默认配置不需要修改
  5. localRoot: 与本地调试不同,远程调试 localRoot 当做scriptMap 一般情况下默认为 ${workspaceRoot} 即可,如果你的代码目录是 ${workspaceRoot} 下载的某个路径 也可明确指定 如 ${workspaceRoot}/scripts
  6. port: 调试端口 和 调试代码中的端口统一即可 无特殊需求
  7. printType: print打印方式
    1. 控制台和系统输出
    2. 控制台输出
    3. 系统输出

调试代码添加

说明:
下载对应的LuaDebug 或 LuaDebugjit 后放入脚本目录中

local breakSocketHandle,debugXpCall = require("LuaDebugjit")("192.168.1.102",7003)   
local breakSocketHandle,debugXpCall = require("LuaDebugjit")("localhost",7003) 
1. IP地址当本机调试时可使用localhost远程调试或移动设备端调试是需要输入调试器所在机器具体的ip 
2. port 端口 LuaIde 默认配置中端口为7003  如有需要可执行更改确保调试器配置端口和调用
代码的端口统一即可  
3. breakSocketHandle luaIde断点及时刷新函数,需要在定时器中调用 该函数确保断点能够及时的
发送到lua 客户端  
4. debugXpCall 程序异常监听函数,用于当程序出现异常时调试器定位错误代码

cocos2.x

local breakSocketHandle,debugXpCall = require("LuaDebug")("localhost",7003)
CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(breakSocketHandle ,0.3,false)
--如果已经存在 __G__TRACKBACK__ 请将 debugXpCall 直接加入 __G__TRACKBACK__ 即可
--__G__TRACKBACK__ 方法不是必须 debugXpCall是实现的是在lua 脚本调用错误时进行代码错误定位
function __G__TRACKBACK__(errorMessage)
    debugXpCall();
end
local status, msg = xpcall(main, __G__TRACKBACK__)

示例文件:cocos2x_main.lua

cocos3.x

local breakSocketHandle,debugXpCall = require("LuaDebug")("localhost",7003)
cc.Director:getInstance():getScheduler():scheduleScriptFunc(breakSocketHandle, 0.3, false) 
--如果已经存在 __G__TRACKBACK__ 请将 debugXpCall 直接加入 __G__TRACKBACK__ 即可
--__G__TRACKBACK__ 方法不是必须 debugXpCall是实现的是在lua 脚本调用错误时进行代码错误定位 
function __G__TRACKBACK__(errorMessage)  
    debugXpCall();  
end  
local status, msg = xpcall(main, __G__TRACKBACK__)

示例文件:cocos3x_main.lua
















以上是关于Cocos2d 调试的主要内容,如果未能解决你的问题,请参考以下文章

PHP代码-psysh调试代码片段工具

方便调试使用的代码片段

Xcode7 真机免证书调试Cocos2D游戏

如何在cocos2d c++代码中调用lua以及探究

如何在cocos2d c++代码中调用lua以及探究

关于windows下创建cocos2d lua工程 无法断点调试 relative (file not exist) 的问题