记录一下动调dll项目的过程

调试DLL的问题

正常试过一遍用 clang 作为启动项目或者是用 dll 作为启动项目,但是都不能成功断下来,这里我说一下我所使用的方法。

首先在项目属性中开启调试符号

项目->属性->配置属性->链接器->调试->生成调试信息选择为生成调试信息(/DEBUG)

然后把项目->属性->配置属性->C/C++ ->常规 ->调试信息格式 ,设置为程序数据库(/ZI)

打开这两个选项之后,可以发现,我们如果设置好调试参数直接启动的话,断点还是不会命中,并且会提示:

因为 clang 的子进程才会加载模块,如果直接开启调试会一直检测该进程没有加载该模块,所以会出现这个错误。

解决问题

一般解决方案

最容易解决的办法,直接附加子进程即可解决,我选择在 run 方法中休眠十秒,然后在下面下断点,新开个 cmd 执行编译命令,然后趁着休眠的时候附加到子进程。

这里可以提前搜索 clang.exe

最下面的那个进程是我们运行的命令,而上面这个就是创建的子进程,所以我们选择附加上面这个进程。

然后我们就可以发现 dll 在vs中断下来了,接下来就可以开开心心地用 VS 去调试 dll 了。

更好的解决方案

当然,在网上冲浪的时候,也是发现了一个插件,在管理扩展中搜 child 就可以直接下载。

安装完成了之后可以在调试->调试其它目标的选项中看到该插件的管理

勾选 enable child process debugging即可。

这样配置好参数之后,直接启动就能马上断下来,算是一个更好的解决方案吧。