LLVM——Pass模块的调试
记录一下动调dll项目的过程
调试DLL的问题
正常试过一遍用 clang 作为启动项目或者是用 dll 作为启动项目,但是都不能成功断下来,这里我说一下我所使用的方法。
首先在项目属性中开启调试符号
项目->属性->配置属性->链接器->调试->生成调试信息选择为生成调试信息(/DEBUG)

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

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

因为 clang 的子进程才会加载模块,如果直接开启调试会一直检测该进程没有加载该模块,所以会出现这个错误。
解决问题
一般解决方案
最容易解决的办法,直接附加子进程即可解决,我选择在 run 方法中休眠十秒,然后在下面下断点,新开个 cmd 执行编译命令,然后趁着休眠的时候附加到子进程。

这里可以提前搜索 clang.exe

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

然后我们就可以发现 dll 在vs中断下来了,接下来就可以开开心心地用 VS 去调试 dll 了。
更好的解决方案
当然,在网上冲浪的时候,也是发现了一个插件,在管理扩展中搜 child 就可以直接下载。

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

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

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 xia0ji233's blog!