我使用Unity来开发游戏。
我为一些脚本构建了一个DLL来修补。以下是如何在脚本中加载dll
AssetBundleBoot.mainAssembly = System.Reflection.Assembly.Load(dll.bytes);
同时,我使用Sentry收集崩溃日志。核心代码
var e = new Event(type);
var trace = new System.Diagnostics.StackTrace(4, true);
if (trace.FrameCount > 0) {
var firstFrame = trace.GetFrame(0);
e.message = logString + ": " + firstFrame;
var frames = fsData.CreateList(trace.FrameCount);
var framesList = frames.AsList;
for (var i = 0; i < trace.FrameCount; ++i) {
var f = trace.GetFrame(i);
var frame = fsData.CreateDictionary();
var frameDict = frame.AsDictionary;
frameDict["filename"] = new fsData(f.GetFileName() ?? "");
frameDict["function"] = new fsData(f.GetMethod().ToString());
frameDict["lineno"] = new fsData(f.GetFileLineNumber());
framesList.Add(frame);
}
var st = fsData.CreateDictionary();
st.AsDictionary["frames"] = frames;
e["stacktrace"] = st;
} else {
e.message = logString + " " + stackTrace;
e.SetExtra("stacktrace", new fsData(stackTrace));
}
我发现dll crash sentry中的代码是否会获得没有行号的堆栈跟踪:
Boolean MoveNext() at line 0
Void LogError(System.Object) at line 0
Void Log(LogType, System.Object) at line 0
Void LogFormat(LogType, UnityEngine.Object, System.String, System.Object[]) at line 0
我尝试使用debug +构建dll并获取mdb文件。我搜索谷歌,找到很多博客告诉我如何使用mdb文件在IDE中调试DLL,但我仍然不知道如何在dll崩溃时在运行时获取调试信息。
那么如何让sentry使用行号(或详细的堆栈跟踪)获取堆栈跟踪
顺便说一句,Unity可以在屏幕的右下角使用“开发构建”构建开发构建。如何在没有“开发构建”的情况下使用调试信息构建播放器。