# 说在前面
CQHttp 很强大,所以为什么需要从代码编译出插件呢,因为为了下断点啊,从 Release 下载的插件没有符号,没办法调试啊,插件莫名其妙就炸了, C++ 的错误信息又那么难懂,不看代码怎么排错啊呜呜呜呜
(ps: 如果你想写一个酷 Q 插件的兼容框架,就拿 CQHttp 做验证的例子吧,它可以很好的检验你框架的启动流程是否符合标准
# 环境需求
- Git
- MSVC v141
- Visual Studio 2019
# 拉取代码
1 | git clone https://github.com/richardchien/coolq-http-api.git |
# 安装依赖
文本复制自 CQHttp 的 Readme, 文件分流到蓝奏云
然后,从 这里 下载 vcpkg-export-20191012.zip(也就是预编译的依赖),并解压到当前工程目录,确保工程目录结构如下:
coolq-http-api ├── ... ├── src ├── vcpkg-export-20191012 │ ├── installed │ ├── scripts │ └── .vcpkg-root ├── CMakeLists.txt └── ...
# 编译程序
一般的 PowerShell 都有对脚本运行的限制,为了安全考虑,这里还是不将此限制打开
- 键入
Win+R打开运行,输入C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy RemoteSigned来打开一个解除脚本限制的PowerShell实例 - 输入
cd 拉取代码的文件夹 - 输入
.\scripts\generate.ps1 Debug生成 CMake 目录,大约不到十秒 - 输入
.\scripts\build.ps1 Debug执行编译流程,大约在一分钟

如果你运气好,不报错的话 , 不过大概也不太可能,CQHttp 代码已经成功编译,并且已经得到了符号文件,此贴终结 (草)
# 错误排除
要是真这么简单我为什么还要水这一篇 (草), 实际上编译流程应该会报错,下文会详细介绍报错的解决方案
在输入 .\scripts\build.ps1 Debug 后,忽略中间产生的各种信息,会出现两行红字,并最终显示 CMake 构建失败
发生在 fmt.lib 库文件中,出现 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2” 的含义是:解决方案为 Debug 模式,而引用了一个 Release 模式的库文件,所以解决方案就很明了了:解决这个引用错误的文件,更改为 Debug 模式的文件
- 进入
build\debug文件夹,打开其中的coolq-http-api.sln解决方案文件 - 选择 app 项目并按
Alt+Enter, 打开项目属性![选择app项目]()
- 依次点击
链接器-输入-附加依赖项-右侧下箭头-编辑![编辑依赖]()
- 寻找
fmt.lib![寻找]()
- 进入这个依赖库目录寻找是否有
dbeug版本的fmt.lib![dbeug版本的fmt.lib]()
- 将这个库替换成为
debug版本的,点击全部保存,应该就可以正常编译了![debug版库]()
再次尝试编译,输入 .\scripts\build.ps1 debug , 可以看到编译成功了
# 符号以及联合调试
其实绕了这么大一圈只是为了带符号的 dll 之后就一上午加半个下午过去了,接下来来介绍 C# 代码与 C++ 代码联合调试的方法
- 将 CQHttp 的 dll 以及 pdb 符号文件拷贝到需要进行调试的地方
- 打开 C# 的解决方案
- 添加一个
现有项目![添加现有项目]()
- 打开刚才编译时用到的
debug目录,选择app.vcxproj![添加app项目]()
这是添加项目成功之后的样子![添加后的样子]()
- 在需要运行的 C# 项目上,按下
Alt+Enter, 依次点击调试-调试程序引擎-启用本地代码调试![启用本地代码调试]()
- 之后就可以挂断点进行调试了
![断点调试]()









