编程文汇

unity中如何调试native插件

如果用c++写unity插件,虽然很多代码都有单元测试,但是实际运行的时候,还是可能出问题的。问题来了,怎么调试呢?

unity本身只带有c#的调试插件,那c++就没办法调试了么?

先google一把,好像只有人问,没人能说怎么能调试。只有自己来了。

隐约记得vc6是可以附加到进程的,现在应该也可以,试试看:

  1. debug编译dll
  2. unity中运行游戏(非常重要,debug前先运行)
  3. 在msvc中选中菜单:调试 -> 附加到进程。
  4. 在弹出的进程列表中选择Unity.exe,附加成功
  5. 在msvc中打个断点

可以看到断点触发,ok,debug可用了。

再写个英文版给国际友人:

How to debug native plugins ( written in c++ c) in Unity?

  1. Open your native plugin project with msvc
  2. Build it in debug mode.
  3. Play your Game in unity (NOTE: Play before debuging)
  4. Choose from menus: "Debug" -> "Attach to process ," (NOT "Attach to Unity"): If not works , try with another msvc without Unity extension. For me, msvc2017 with Unity extersion is for c# developing, msvc2019 for cpp developing.
  5. Pick "Unity.exe" from the process list.
  6. Make a break point in msvc.
  7. Break point should be triggered.

升级了一次unity,现在这个方法好像不行了,被unity嵌入的反debug保护挡住了。

可以再试试unity官方的debug手册:
https://docs.unity3d.com/Manual/WindowsDebugging.html

我设置了注册表后,好像又可以了。不知道是我太年轻 ,还是unity太诡异。

这个设置 对于莫名其妙的崩溃,很有用:
保存为reg文件,执行

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]
"Auto"="1"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug]
 "Auto"="1"

这个问题解决很久了,今天在此记录下来:

原因:估计是因为unity为了反破解,对主程序加壳、加入了反debug机制

应对方法:使用破解版:

这也是没办法的办法,hacked版一般都是脱壳、去掉了auti-debug机制,这样,我们就能正常的debug。然后利用本文中描述的方法,可以正常调试。

对于我来说没有debug真是不行,程序崩了、数据不对,找不到出问题的地方,靠log输出,太麻烦。其次,不要频繁更新unity,因为你更新之后可能不能debug。一直使用一个可以debug的版本,直到程序开发的比较完整、稳定。