dnSpy调试Unity游戏

发布时间:2019-05-04编辑:佚名阅读(5686)

调试Unity游戏

dnspy可以调试Unity调试版本和发布版本。发布版本需要修改mono.dll/mono-2.0-bdwgc.dll文件。

也可以将发布版本转换为调试版本。

调试发布版本

备份您的游戏。

您需要一个补丁mono.dll/mono-2.0-bdwgc.dll文件。您可以在发布页面上找到Unity4.x、5.x和2017.x-2018.x的32位和64位版本。

你需要知道用于构建游戏的统一版本。要获取Unity版本号,请检查<game>.exe或unityplayer.dll的文件属性。

您还需要知道它是32位还是64位游戏。如果是32位游戏,请使用win32目录;如果是64位游戏,请使用win64目录。

不同的Unity版本使用不同的mono.dll文件名。旧的Unity游戏使用.NET 2.0-3.5程序集并使用mono.dll,而新的Unity游戏使用.NET 4.x程序集则使用mono-2.0-bdwgc.dll。此文件存储在不同的位置,具体取决于Unity版本:

  • <root>\<GAME>_Data\Mono\mono.dll

  • <root>\<GAME>_Data\Mono\EmbedRuntime\mono.dll

  • <root>\<GAME>_Data\MonoBleedingEdge\EmbedRuntime\mono-2.0-bdwgc.dll

  • <root>\Mono\EmbedRuntime\mono.dll

  • <root>\MonoBleedingEdge\EmbedRuntime\mono-2.0-bdwgc.dll

将dnspy的补丁mono.dll/mono-2.0-bdwgc.dll文件复制到游戏中,覆盖其文件。

现在转到debug->start debugging并选择Unity debug engine。如果游戏崩溃,您可能使用了错误的版本,或者在游戏为64位时使用了32位文件,反之亦然。

如果游戏已经开始,您也可以选择Unity(连接)。dnspy的mono.dll将查找名为dnspy_unity_dbg(Unity with.NET 2.0-3.5程序集)或dnspy_unity_dbg2(Unity with.NET 4.x程序集)的环境变量。

DNSPY_UNITY_DBG:

--debugger-agent=transport=dt_socket,server=y,address=127.0.0.1:55555,defer=y or

--debugger-agent=transport=dt_socket,server=y,address=127.0.0.1:55555,defer=y,no-hide-debugger to enable detection of the debugger.

DNSPY_UNITY_DBG2:

--debugger-agent=transport=dt_socket,server=y,address=127.0.0.1:55555,suspend=nor

--debugger-agent=transport=dt_socket,server=y,address=127.0.0.1:55555,suspend=n,no-hide-debugger to enable detection of the debugger.

如果环境变量丢失,它将侦听端口55555。

如果您想自己编译mono.dll,请参阅https://github.com/0xd4d/dnspy-unity-mono

调试调试生成

  • 在启用脚本调试的情况下生成开发版本,或者将发布版本转换为调试版本,请参见下面的

  • 在Unity编辑器中运行游戏或按Play

  • 启动dnspy并转到debug->attach to process(unity)

注意:在使用mono-2.0-bdwgc.dll的Unity版本中有一个“跨步”错误。使用补丁mono-2.0-bdwgc.dll,它有缺陷修复。

如果您在对话框中看不到游戏,则整个过程可能在没有键盘焦点时暂停。在这种情况下,在dnspy中按刷新,然后快速切换回游戏,然后再切换回dnspy。如果你仍然看不到它,等到它的介绍结束后再试一次。

如果您仍然看不到游戏,那么它可能不是一个统一游戏或调试构建。

将发布版本转换为调试版本

在资源管理器中查看exe的属性。你应该看到统一版本号。

转到Unity下载存档并下载并安装正确版本的Unity编辑器。您可以在<unity install dir>\editor\data\playbackengines\windowsstandalonesupport\variations中找到Windows播放器。

最有可能的情况是,您需要win32_development_mono中的文件,因为它可能是一个32位的游戏。

备份您的游戏。将debug build data目录复制到您的games<name>数据目录,覆盖其中的所有内容。

  • 旧的Unity版本:复制player_win.exe并将其重命名为<game name>.exe。

  • 更新的Unity版本:复制windowsplayer.exe+unityplayer.dll,并将windowsplayer.exe重命名为<game name>.exe。

要启用脚本(.net)调试,必须在<game name>数据目录中创建一个文件。

如果是Unity 4.x-5.x或Unity 2017.1:

<game name>游戏数据\游戏连接配置文件

例子:

listen 3060108046 1 1

或者是Unity 2017.2或更高版本

<game name>\u data\boot.config

例子:

player-connection-mode=Listen
player-connection-guid=3060108046
player-connection-debug=1
player-connection-wait-timeout=-1
player-connection-ip=123.45.67.89

似乎只需要player connection debug=1,其他行可以删除。

  关键字:dnSpy调试Unity游戏


鼓掌

4

正能量

0

1

呵呵

1


评论区