如何从加载的DLL获取调试信息?

时间:2016-10-14 08:11:42

标签: c# debugging unity3d dll sentry

我使用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可以在屏幕的右下角使用“开发构建”构建开发构建。如何在没有“开发构建”的情况下使用调试信息构建播放器。

0 个答案:

没有答案