0

我在调查VSng的Clang代码库,并且.sln文件由CMake生成。 我已经将解决​​方案配置为Debug/x64,我可以看到生成的.pdb伴随这些库的文件,但我无法打破链接到clang可执行文件的lib代码。如何在VS2015中调试Clang静态链接库

例如,我在解析期间控制流必须经过的clangParse模块中设置了一些断点,但在打印AST之后,调试器没有停在clangParse模块的断点上,而是仅在在叮当声模块本身设置的断点。

对于其他一些手动创建的带有可执行文件和静态库的解决方案,我可以调试这些库。不知道为什么这不适用于CMake生成的Clang/LLVM解决方案。

我需要在这里做什么特殊设置?

+0

您能否分享重现此问题的详细步骤?如果您只是使用“无需调试而启动(Ctrl + F5)”运行该项目,该项目是否可以成功编译?如果断点没有命中并且项目编译正常,你会在输出窗口中看到有用的消息吗?在调试模式下,将鼠标放在未命中的断点上,或者点击调试菜单 - > Windows->模块窗口,你是否收到任何消息? –

+0

@ Eddie-MSFT是的,我可以成功地编译和运行它,并且我可以在clang项目中断点,但不能在其他静态链接库(例如clangParse)中断开。我很确定控制流程应该经历我设定的中断点。 – Jamboree

+0

您可以通过此链接启用“异常设置”窗口:https://msdn.microsoft.com/en-us/library/x85tt0dd.aspx。在将调用库的代码行(A)中添加一个断点,然后在命中(A)后使用“Step Into(F11)”对其进行调试,以便您可以一步一步地调试应用程序,收集消息。请在“工具 - >选项 - >调试”下选中“显示反汇编源代码不可用”选项。如果仍然没有消息,你能分享一个简单的样本吗? –

回答

1

问题是Clang驱动程序内部在Windows上产生了自己的子进程,并且所有有趣的事情都是在子进程中完成的,所以libs中的断点永远不会因为它们在另一个进程中而被击中。

要解决此问题,请安装Microsoft Child Process Debugging Power Tool并启用子进程调试,这会将子进程附加到调试器。