[TOC]
LuaPanda已支持真机调试。我们建议真机调试使用lua库,可以热更下发调试器。
libpdebug.so库默认放置在VSCode插件中,真机调试时可能无法被找到。如果希望使用C库调试,需要把库或是C库源码编译到工程中(Release版本不建议)。
以下是真机调试的两种方法
- 安装adb命令
如果没有安装过安卓SDK,可以下载Platform Tools,其中包含adb命令
https://developer.android.com/studio/releases/platform-tools.html
- 设置反向代理
手机通过数据线连接PC,在终端输入
adb reverse tcp:8818 tcp:8818
如果没有报错,手机的8818端口数据会转发到pc的8818端口,实现内网访问。
VSCode 端 Launch.json中的connectionPort
也到要是8818(默认),以便接收消息。
- 开始调试
启动调试器和APP即可正常调试。
注意: 如中途拔掉手机,重连手机后需要重新输入adb reverse tcp:8818 tcp:8818
- 处于同一网络
保证手机和pc连上同一局域网,相互可以ping通。
- 修改代码
启动调试器代码,ip改为运行 VSCode 的 pc的 ip 地址。
require("LuaPanda").start("pcIP",8818)
- 开始调试
启动调试器和APP即可正常调试。
-
安卓手机连接windows开启反向代理后,游戏运行会因为attach连接而卡顿。建议准备进行连接时再开反向代理,不需要调试时拔线或者使用下面命令解除反向代理
adb reverse --remove-all
mac上无此现象。
-
超时时间设置
之前经常有同学咨询一种情况:本机调试可以成功连接,但是真机调试无法建立起连接。这里有两种可能:
-
手机apk中是否集成了luasocket
-
超时时间太短
这里解释下第二点:
luasocket 是同步连接,lua attach 使用轮询机制查询是否可以建立连接,如果每次等待连接比较久,会卡游戏进程。
LuaPanda.lua 文件中有三个设置项
local attachInterval = 1; --attach间隔时间(s) local connectTimeoutSec = 0.005; --lua进程作为Client时, 连接超时时间, 单位s. 时间过长等待attach时会造成卡顿,时间过短可能无法连接。建议值0.005 - 0.05 local listeningTimeoutSec = 0.5; -- lua进程作为Server时,连接超时时间, 单位s. 时间过长等待attach时会造成卡顿,时间过短可能无法连接。建议值0.1 - 1
分别表示 lua 部分每次查询 attach 连接的时间间隔,查询连接的超时时间。
在localhost本机调试的时候,不存在网络延迟,所以超时时间被设置的非常短,减少对游戏帧数的影响。
但是在网络调试的时候,过短的超时时间可能无法建立起连接。首次使用时可以尝试调大一些,后续再根据网络状况缩小,比如把connectTimeoutSec调整到0.5。
-
- 自动路径模式下,无需特别设置。
- 如使用手动拼接路径,请参阅如下内容决定是否使用路径映射
当调试lua文件时,当前正在执行的文件路径是由lua虚拟机返回给调试器(http://www.lua.org/manual/5.3/manual.html#lua_getinfo)。
调试器获得的路径可能是文件的绝对路径,也可能是相对路径。这取决于加载文件时传给lua虚拟机的文件路径。
如果调试器获得的是绝对路径,那么在命中断点时直接把这个路径传给VSCode。
如果是相对路径,调试器使用cwd+getinfo拼出完整路径,再传给VSCode。可以调整cwd,以确保拼出的路径是正确的。
如果调试器获得的绝对路径,或者拼接成的路径有偏差(参见 issue #18),我们提供路径映射配置 docPathReplace
比如lua文件在pc上路径 C:/GameProcect/Assets/script/test.lua 放置在手机里,路径变成了 /data/data/com.project.test/script/test.lua
在launch.json docPathReplace中设置
"docPathReplace": ["/data/data/com.project.test/"," C:/GameProcect/Assets/"]
就可以完成路径映射,把运行环境的/data/data/com.project.test/script/test.lua映射到观察环境C:/GameProcect/Assets/script/test.lua
调试器分为 vscode 插件 和 LuaPanda.lua 两部分。通常情况下 VScode 插件作为 server 端,lua 进程作为 client.
这种配置会造成问题,当运行 VScode 的 pc 处于内网时,client 通过 ip 是无法连接的(上面的安卓反向代理方法不受影响)。
为了解决以上情况。调试器支持 c-s 反转,具体使用方法是
-
确认 VScode 插件 以及 LuaPanda.lua 都升级到3.2.0版本
-
在 launch.json 中 加入如下配置
"VSCodeAsClient": true,
"connectionIP": "127.0.0.1"
这里的 ip 填写要连接的手机 ip. 之后尝试在 VScode 中运行,会提示
[Connecting] 调试器 VSCode Client 已启动,正在尝试连接。 TargetName:LuaPanda Port:8818
- 修改 lua 代码的 require 调用
require("LuaPanda").startServer("0.0.0.0", port)
这里的port 要和要上面 TargetName:LuaPanda Port:8818 这里的 Port 保持一致,之后若连接正常即可调试