我正在尝试在Unity内调试我的托管DLL。以前在Unity 2018.x上可以正常工作。
现在我有Unity 2019.3,我不能再调试了(我的DLL工作正常,我只是不能调试它们)。
我的DLL和它的pdb文件都在Assets文件夹里。这曾经是足够的,能够调试他们。
读了这个文档。https:/docs.unity3d.comManualUsingDLL.html我正在尝试创建mdb文件。
第一个问题,文档说我必须通过.pdb文件作为参数,而谷歌上的大多数链接说,通过.dll
这个链接还指出,我应该改变我的.bat文件的工作目录,以便能够使用pdb2mdb.exe。https:/answers.unity.comquestions294195pdb2mdb-usage-error-from-command-line.html。
这是我的代码。
set PathToLib="Libraries\"
if exist Libraries\LibBDD.dll (
echo Before switching directory for my lib %CD%
cd %PathToLib%
echo new directory %CD%
@pause
"C:\Program Files\Unity\Editor\Data\Mono\lib\mono\2.0\pdb2mdb.exe" LibBDD.dll
@pause
cd ..\..\..\..\..\
echo LibBDD done, new directory %CD%
)
首先,我不确定我的CD命令是否有效 因为路径没有改变。但我没有得到任何异常。
使用这段代码,我得到的结果是
Fatal error: Microsoft.Cci.Pdb.PdbDebugException: Unknown custom metadata item kind: 6 à Microsoft.Cci.Pdb.PdbFunction.ReadCustomMetadata(BitAccess bits) à Microsoft.Cci.Pdb.PdbFunction.ctor(String module, ManProcSym proc, BitAccess bits) à Microsoft.Cci.Pdb.PdbFunction.LoadManagedFunctions(String module, BitAccess bits, UInt32 limit, Boolean readStrings) à Microsoft.Cci.Pdb.PdbFile. LoadFuncsFromDbiModule(BitAccess bits, DbiModuleInfo info, IntHashTable names, ArrayList funcList, Boolean readStrings, MsfDirectory dir, Dictionary`2 nameIndex, PdbReader reader) à Microsoft.Cci.Pdb.PdbFile. Cci.Pdb.PdbFile.LoadFunctions(Stream read, BitAccess bits, Boolean readAllStrings) à Pdb2Mdb.Driver.Convert(AssemblyDefinition assembly, Stream pdb, MonoSymbolWriter mdb)
没有光盘,我得到的是
单声道pdb到mdb调试符号存储转换器 使用方法: pdb2mdb汇编。
我使用的是Visual Studio 2019 Community。
我不知道自己做错了什么,为什么在Unity中不能再调试。我试着在VS中把csproj添加到解决方案中,但是已经没有用了,符号没有加载。
看来2019.3中发生了一些变化,由于某些原因,Unity不再自动生成mdb文件。
解决方法是将你的pdb设置为 手提 而不是 充分 默认情况下,您可以通过以下说明来实现这一点。此处. 之后你就不再需要mdb文件了。
从上面的链接中逐步说明。
在解决方案资源管理器中,选择项目
选择 属性 图标(或按 Alt+Enter).
在侧窗格中,选择 构建 (或 编制 在Visual Basic中)。)
在 配置 列表,选择 调试 或 释放.
选择 高级 按钮(或 高级编译选项 在Visual Basic中的按钮)。)
在 调试信息 列表 生成调试信息 列表),选择 手提式.
构建你的项目。
编译器会在与可执行文件或主要输出文件相同的文件夹中创建符号文件。