Skip to content

Latest commit

 

History

History
159 lines (84 loc) · 5.33 KB

debug-on-phone.md

File metadata and controls

159 lines (84 loc) · 5.33 KB

真机调试

[TOC]

LuaPanda已支持真机调试。我们建议真机调试使用lua库,可以热更下发调试器。

libpdebug.so库默认放置在VSCode插件中,真机调试时可能无法被找到。如果希望使用C库调试,需要把库或是C库源码编译到工程中(Release版本不建议)。

以下是真机调试的两种方法

1. 安卓反向代理调试

  1. 安装adb命令

如果没有安装过安卓SDK,可以下载Platform Tools,其中包含adb命令

https://developer.android.com/studio/releases/platform-tools.html

  1. 设置反向代理

手机通过数据线连接PC,在终端输入

adb reverse tcp:8818 tcp:8818

如果没有报错,手机的8818端口数据会转发到pc的8818端口,实现内网访问。

VSCode 端 Launch.json中的connectionPort也到要是8818(默认),以便接收消息。

  1. 开始调试

启动调试器和APP即可正常调试。

注意: 如中途拔掉手机,重连手机后需要重新输入adb reverse tcp:8818 tcp:8818

2. 局域网调试

  1. 处于同一网络

保证手机和pc连上同一局域网,相互可以ping通。

  1. 修改代码

启动调试器代码,ip改为运行 VSCode 的 pc的 ip 地址。

require("LuaPanda").start("pcIP",8818)
  1. 开始调试

启动调试器和APP即可正常调试。

关于真机调试的说明

  • 安卓手机连接windows开启反向代理后,游戏运行会因为attach连接而卡顿。建议准备进行连接时再开反向代理,不需要调试时拔线或者使用下面命令解除反向代理

    adb reverse --remove-all
    

    mac上无此现象。

  • 超时时间设置

    之前经常有同学咨询一种情况:本机调试可以成功连接,但是真机调试无法建立起连接。这里有两种可能:

    1. 手机apk中是否集成了luasocket

    2. 超时时间太短

    这里解释下第二点:

    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

反转 client - server

调试器分为 vscode 插件 和 LuaPanda.lua 两部分。通常情况下 VScode 插件作为 server 端,lua 进程作为 client.

这种配置会造成问题,当运行 VScode 的 pc 处于内网时,client 通过 ip 是无法连接的(上面的安卓反向代理方法不受影响)。

为了解决以上情况。调试器支持 c-s 反转,具体使用方法是

  1. 确认 VScode 插件 以及 LuaPanda.lua 都升级到3.2.0版本

  2. 在 launch.json 中 加入如下配置

"VSCodeAsClient": true,
"connectionIP": "127.0.0.1"

这里的 ip 填写要连接的手机 ip. 之后尝试在 VScode 中运行,会提示

[Connecting] 调试器 VSCode Client 已启动,正在尝试连接。  TargetName:LuaPanda Port:8818
  1. 修改 lua 代码的 require 调用
require("LuaPanda").startServer("0.0.0.0", port)

这里的port 要和要上面 TargetName:LuaPanda Port:8818 这里的 Port 保持一致,之后若连接正常即可调试