# 前言

一般在开发项目的时候,为了便于管理,都不会直接把代码建立到 Unity3D 中,而是使用第三方工程,然后编译成 DLL 放进来使用。

今天我就碰到个问题:死活无法调试这个 DLL,算是愁了一天了。

打断点就提示『当前不会命中断点。找不到相应位置』表现就像如下:

想想代码调试不了,就非常愁。
而搜索的话,Unity 相关有用的信息现在也是越来越少,一连好几页结果翻下去,都是摸不着点的。

先后试过:

  • 选项 -> 调试 -> 符号设置
  • 选项 -> 调试 -> 去掉『启用 "仅我的代码"』
  • 选项 -> 调试 -> 去掉『要求源文件与原始版本完全相同』
  • 选项 -> 适用于 Unity 工具设置
  • Unity 中一些设置 等等...

然而没有任何作用。

后面还检查了 调试 -> 窗口 -> 模块,也显示符号已加载:

# 解决

后面还是偶然跟同事提了提,稍微讨论了下,然后说是不是 DLL 版本问题?

于是我就着重在筛选了一下搜索结果,在 Unity5 将 DLL 生成 mdb 的方法 中,得到了那么点灵感。

于是跟着路径找到 Unity 的安装目录:Editor\Data\MonoBleedingEdge\lib\mono

个人的 DLL 编译版本是 4.6 ,看了下这里确实有 4.6-api,但是各种工具都位于 4.5 目录,包括 pdb2mdb.exe 各种 exe 格式工具。

于是将 DLL 库项目框架版本号改为 4.6,重新编译,得到如下结果:

意思是说 pdb 格式有点过时了,要么改成 可移植 pdb 格式 —— 这个我在上一篇 Box2DSharp 的介绍与使用 中也提到过,改一下编译时生成格式就行了:

最后断点终于打上了!