【填坑】UE4&Android 想调试下怎么就这么难呢

手游偶尔会出现崩溃,就起了边测试边调试的心,实践起来没想象中那么顺利。
参见《使用Nsight Tegra联机调试UE4 Android端游戏》。

问题描述

好几个手机,直接运行Debug几乎都到这一步就戛然而止了。


【填坑】UE4&Android 想调试下怎么就这么难呢_第1张图片

此时游戏是已经安装成功了的,比较特殊的是在【OPPO OPPO A57 Android 6.0.1 (API 23) 】上除了安装游戏外,还安装了一个东西,其它手机均未有安装。
但是网上几乎找不到“com.nvidia.pentak.debugproxy”相关的任何信息。


【填坑】UE4&Android 想调试下怎么就这么难呢_第2张图片

既然游戏已安装,就尝试手动启动游戏,再附加到进程。
会首先“Pulling device files...”


【填坑】UE4&Android 想调试下怎么就这么难呢_第3张图片

接下来,【samsung SM-G9280 Android 7.0 (API 24) 】上会出现这个错误信息。
个人感觉跟是否Root应该关系不大,好像是三星对run-as的支持有问题。


【填坑】UE4&Android 想调试下怎么就这么难呢_第4张图片

【LGE Nexus 5X Android 7.1.1 (API 25) 】【QiKU 8692-A00 Android 6.0.1 (API 23)】【Meizu PRO 5 Android 5.1 (API 22)】上就都卡在了“Starting GDB debugger...”处。


【填坑】UE4&Android 想调试下怎么就这么难呢_第5张图片

此时【输出】窗口的打印信息为(除了warning详情不一样其它相似):

Nsight Tegra: Starting debug server on device...
Nsight Tegra: Starting C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 14.0\COMMON7\IDE\EXTENSIONS\NVIDIA\NSIGHT TEGRA\3.4\Debuggers\arm\gdb.exe...
Nsight Tegra: Running script E:\Develop\Shooter\Client\Intermediate\Android\APK\libs\armeabi-v7a\gdb.setup...
Nsight Tegra: Connecting to remote device...
Loaded 'linker'
......
# Loaded 一些文件
......
warning: Could not load shared library symbols for 15 libraries, e.g. /system/framework/arm/boot.oat.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
warning: Could not load shared library symbols for 3 libraries, e.g. /data/dalvik-cache/arm/system@[email protected]@classes.dex.
warning: .dynamic section for "C:\Users\Administrator\AppData\Local\Temp\Nsight_Tegra_devices\860BCNP223J3\symbols32\system\lib\libgnustl_shared.so" is not at the expected address (wrong library or version mismatch?)

而【NVIDIA】窗口会陆续出现错误提示,最终还是失败。


【填坑】UE4&Android 想调试下怎么就这么难呢_第6张图片

看了“%AppData%\NVIDIA Corporation\Nsight Tegra\Logs”下的日志,感觉是否和“com.nvidia.pentak.debugproxy”有点关系,其它也还是没啥头绪。

2017-08-17 11:55:09.1209|INFO|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] command: "13-target-select remote :2020"
......
# stdout 了一些文件
......
2017-08-17 11:55:29.1331|ERROR|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] has not responded to "-target-select remote :2020" command in 20000 ms. The command is timed-out.
2017-08-17 11:55:29.1331|INFO|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] command: "14-thread-list-ids"
2017-08-17 11:55:49.1332|ERROR|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] has not responded to "-thread-list-ids" command in 20000 ms. The command is timed-out.
2017-08-17 11:55:49.1332|INFO|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] command: "15-exec-continue"
2017-08-17 11:56:09.1474|ERROR|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] has not responded to "-exec-continue" command in 20000 ms. The command is timed-out.
2017-08-17 11:56:09.1474|INFO|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] command: "-exec-interrupt"
2017-08-17 11:56:09.1474|INFO|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] command: "-gdb-exit"
2017-08-17 11:56:09.1474|INFO|Nvidia.PentaK.PentaKPackage|[PentaKPackage] Mode changed to DBGMODE_Design
2017-08-17 11:57:02.8154|ERROR|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] stderr:This application has requested the Runtime to terminate it in an unusual way.
2017-08-17 11:57:02.8154|ERROR|Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager|[GDB] stderr:Please contact the application's support team for more information.

OPPO下也不是一帆风顺的,因为它调试安装均需要输入密码,这个过程中也不知道它处理了什么,稍不留神就会导致安装、运行不成功。


【填坑】UE4&Android 想调试下怎么就这么难呢_第7张图片

昨儿折腾了一天,暂时没什么好的想法了,等有了再尝试吧~
大家要有经验或想法的,欢迎指教!

解决方案

从最后的Time out入手,顺便搜了下日志里的Nvidia.PentaK.Debug.Interop.Gdb.GdbProcessManager关键字,参见Failure to attach debugger due to GDB command time-out,尝试调整了“Timeout, s”的值,居然就可以了!::>_<::

从“Starting GDB debugger...”开始游戏界面会出现假死的情况。
完成后会出现下一步“Starting Java debugger...”,这步完成很快,随后提示框关闭,正式进入调试状态。


【填坑】UE4&Android 想调试下怎么就这么难呢_第8张图片

此时退出游戏时会正常输出日志。

线程 'Thread-14961 [Java]' (0x43) 已退出,返回值为 0 (0x0)。
线程 'Thread-6 [Java]' (0x49) 已退出,返回值为 0 (0x0)。
Program exited normally
程序“[21436] com.test.shooter”已退出,返回值为 0 (0x0)。

其它疑惑

  • 直接运行Debug,貌似只有OPPO上第一次正常安装“com.nvidia.pentak.debugproxy”的情况下能够正常进入调试状态,再次运行没有执行安装也还是不行,其它手机也还是不行。
  • 除三星外其它附加进程都已OK,不同机型需要的time还不尽相同。
  • “com.nvidia.pentak.debugproxy”到底是干嘛用的!?

你可能感兴趣的:(【填坑】UE4&Android 想调试下怎么就这么难呢)