截至 2017 年的 clang 5.0 pdb 支持

Posted

技术标签:

【中文标题】截至 2017 年的 clang 5.0 pdb 支持【英文标题】:clang 5.0 pdb support as of 2017 【发布时间】:2017-12-17 19:56:05 【问题描述】:

这里说明clang现在知道如何生成.pdb文件(http://blog.llvm.org/2017/08/llvm-on-windows-now-supports-pdb-debug.html)。

据我了解,至少现在预计使用 Microsoft 链接器的 clang 会生成与 msvc 工具链生成的文件等效的 .pdb 文件。

这里解释了如何使用主流 Visual Studio 2017 调试“外部”二进制文件,即不是使用项目/解决方案 (https://docs.microsoft.com/en-us/visualstudio/debugger/how-to-debug-an-executable-not-part-of-a-visual-studio-solution) 构建的二进制文件。

我用clang -g main.c -o main.exe 编译了一个简单的hello world 应用程序,它按预期生成了一个.pdb 文件。

但是,当我尝试进入它时,Visual Studio 抱怨 .pdb 文件不包含行号信息。

相比之下,使用cl /EHsc /Zi main.c 编译可以正常使用Visual Studio 进行调试。

我目前正在尝试了解 clang 生态系统是否已经足以在 Windows 上进行开发,如果有人可以解释,我将不胜感激:

    stable clang 和 msvc 生成的 .pdb 文件有什么区别? linklld 在这方面有什么区别吗? clang 6.0 会发生变化吗?

【问题讨论】:

也许你应该运行clang-cl.exe 愚蠢的问题:如果您已经在 Windows 上并且可以访问 Visual Studio,为什么不直接使用 Visual Studio? 【参考方案1】:

这对我有用:

clang -g -gcodeview main.c -o main.exe

-gcodeview 选项告诉 Clang 在 Microsoft 的 CodeView format 中生成调试信息。 然后 Visual Studio 可以毫无问题地读取生成的 .pdb

另一种选择是使用clang-cl,您可以将/Zi 传递给它,或者MIEngine,这将允许您在Visual Studio 中使用非CodeView 调试信息。 不过,我都没有尝试过。


为了记录,这是我的 ma​​in.c

#include <stdio.h>

int main() 
    getc(stdin); // pause to allow attaching the debugger
    return 0;

我用Clang 6.0.0。

【讨论】:

以上是关于截至 2017 年的 clang 5.0 pdb 支持的主要内容,如果未能解决你的问题,请参考以下文章

用了三年的 pdb,没想到还能这么调试

如何在 VS2015 中调试 Clang 静态链接库

Clang如何处理MSVC的编译参数

如何使 <div> 完全填满浏览器窗口,包括截至 2019 年的 Mobile Safari

Mac如何安装clang,求最新方法

CSS:我可以查询以英寸为单位的实际设备宽度吗?如果不能,我如何查询截至 2015 年的所有移动设备?