C# Mono上未加载PDB的StackTrace
我试图从我正在做的一个游戏的一些痕迹中找到意义。这些都是用Mono在Mac上生成的C# Mono上未加载PDB的StackTrace,c#,mono,stack-trace,pdb-files,C#,Mono,Stack Trace,Pdb Files,我试图从我正在做的一个游戏的一些痕迹中找到意义。这些都是用Mono在Mac上生成的 位于Microsoft.Xna.Framework.Game.Run()[0x0002c]中:0 这告诉我方法名(Microsoft.Xna.Framework.Game.Run)和ILOffset(0x0002c),但我不知道什么是9fdab2ac823a429cb7b852542662cc。它不是元数据标记,而是某种GUID 能给我解释一下这个号码是多少吗?我的目标是将这些信息组合在一起,然后与原始PDB/
位于Microsoft.Xna.Framework.Game.Run()[0x0002c]中:0
这告诉我方法名(Microsoft.Xna.Framework.Game.Run
)和ILOffset(0x0002c
),但我不知道什么是9fdab2ac823a429cb7b852542662cc
。它不是元数据标记,而是某种GUID
能给我解释一下这个号码是多少吗?我的目标是将这些信息组合在一起,然后与原始PDB/MDB文件一起重新构造适当的堆栈跟踪
作为一种解决方法,我创建了自己的stacktrace方法,该方法还输出元数据令牌,但我更愿意使用Mono抛出的本机stacktrace
我不知道9fdab2ac823a429cb7b8525426626ccc是什么
散列元素(在
之间)是该方法所属的程序集模块的模块版本ID(MVID
)
它们的产生使得本地崩溃(来自AOT的应用程序)可以通过Mono的符号目录进行符号化,该目录是在应用程序的编译/AOT过程中通过生成的
mono--aot=msym dir=
或者在编译阶段后使用mono-symbolicate
(您需要所有原始构建工件):
mono symbolicate存储符号myExeWithDebugPDBsDirectory/msym dir myExeWithDebugPDBsDirectory
这将生成目录(myEXEwithDebugPDBsDirectory/msym dir
),其中包含:
符号目录包含名为MVID或AOTID的子文件夹
- MVID子文件夹包含.dll/.exe和.mdb文件
- AOTID子文件夹包含.msym文件
然后,您可以稍后使用mono-symbolicate
来表示崩溃(使用匹配应用程序中的msym-dir
),以生成“正常”托管代码外观的异常/堆栈跟踪
注意:在运行exe之前,您还可以通过设置一个env.var来关闭这些Mono“compact”序列点:
MONO_DEBUG=no-compact-seq-points mono yourApp.exe
回复:这是一个相当模糊的信息(我在谷歌上尝试了大量的组合来找到有用的东西)。非常感谢!我刚刚抓取了他们github的mono symbolicate,编译了它,然后在我的游戏输出文件夹(只包含.exe/.dll/.pdb文件)上使用了两个命令,我可以立即反转堆栈跟踪!如果我知道这一点,这将节省我几个小时来滚动我自己的解决方案,但这更优雅。再次感谢:)@LennardFonteijn没问题,很高兴它有帮助mono symbolicate
根基于Xamarin.iOS
和Xamarin.Android
,因此您可以表示从ObjC和Java(通过CIL托管代码)移动应用发送到Google/Apple应用商店控制台的本地崩溃。但是,由于它是基于mono的,它当然适用于任何mono/.Net应用程序。很多信息都来自较旧的Xamarin版本的注释,很遗憾他们没有在更公开的文档中提供这些信息(除了mono repo中的“隐藏”自述和Xamarin的一些较旧版本注释)因为它确实派上了用场