提交 3b99c845 编写于 作者: J johnche(车雄生)

HOTFIX_DEBUG_SYMBOLS的支持

上级 3f08feb1
## 约束
为了不影响开发,这个特性默认是不打开的,需要添加HOTFIX_ENABLE宏。打开后由于il和源代码已经对应不上,所以(双击Unity3D日志)代码会定位到错误的地方,调试功能工作也不正常。
为了不影响开发,这个特性默认是不打开的,需要添加HOTFIX_ENABLE宏。
热更特性依赖Cecil,添加HOTFIX_ENABLE宏之后,可能会报找不到Cecil。这时你需要到Unity安装目录下找到Mono.Cecil.dll,拷贝到项目里头。
打开HOTFIX_ENABLE后由于il和源代码已经对应不上,所以(双击Unity3D日志)代码会定位到错误的地方,调试功能工作也不正常。
打开HOTFIX_DEBUG_SYMBOLS可以解决il和源代码对应不上的问题,但如果在编辑器下运行过后在修改代码,会报Assembly-CSharp.dll.mdb的写冲突错误。
建议的做法是HOTFIX_ENABLE,HOTFIX_DEBUG_SYMBOLS在build手机版本的时候打开,平时编辑器下需要开发补丁的时候打开HOTFIX_ENABLE,开发补丁时需要调试的时候打开HOTFIX_DEBUG_SYMBOLS。
热更特性依赖Cecil,添加HOTFIX_ENABLE宏之后,可能会报找不到Cecil。这时你需要到Unity安装目录下找到Mono.Cecil.dll,拷贝到项目里头。而HOTFIX_DEBUG_SYMBOLS则依赖Mono.Cecil.Pdb.dll。
不支持静态构造函数。
......
......@@ -127,7 +127,12 @@ namespace XLua
//[UnityEditor.MenuItem("XLua/Hotfix Inject In Editor", false, 3)]
public static void HotfixInject()
{
#if HOTFIX_DEBUG_SYMBOLS
var readerParameters = new ReaderParameters { ReadSymbols = true };
AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly(INTERCEPT_ASSEMBLY_PATH, readerParameters);
#else
AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly(INTERCEPT_ASSEMBLY_PATH);
#endif
init(assembly);
if (assembly.MainModule.Types.Any(t => t.Name == "__XLUA_GEN_FLAG")) return;
......@@ -171,8 +176,12 @@ namespace XLua
}
}
}
#if HOTFIX_DEBUG_SYMBOLS
var writerParameters = new WriterParameters { WriteSymbols = true };
assembly.Write(INTERCEPT_ASSEMBLY_PATH, writerParameters);
#else
assembly.Write(INTERCEPT_ASSEMBLY_PATH);
#endif
Debug.Log("hotfix inject finish!");
}
......
......@@ -8,9 +8,9 @@ xLua为Unity3D增加Lua脚本编程的能力,进而提供代码逻辑增量更
## xLua的突破
xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的突破是:
xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是:
* Unity3D全平台热补丁技术,可以运行时把C#实现(整个类,或者单个方法,操作符,属性,事件,构造函数,析构函数,支持泛化)替换成lua实现;
* Unity3D全平台热补丁技术,可以运行时把C#实现(方法,操作符,属性,事件,构造函数,析构函数,支持泛化)替换成lua实现;
* 自定义struct,枚举在Lua和C#间传递无C# gc alloc;
* 编辑器下无需生成代码,开发更轻量;
......@@ -36,7 +36,7 @@ luaenv.Dispose();
1、DoString参数为string,可输入任意合法的Lua代码,本示例在lua里调用C#的UnityEngine.Debug.Log打印了个日志。
2、一个LuaEnv实例对应Lua虚拟机,于开销的考虑,建议全局唯一。
2、一个LuaEnv实例对应Lua虚拟机,于开销的考虑,建议全局唯一。
C#主动调用lua也很简单,比如要调用lua的系统函数,推荐方式是:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册