使用 linux 和 g++ 生成 pdb 文件

Posted

技术标签:

【中文标题】使用 linux 和 g++ 生成 pdb 文件【英文标题】:Generate pdb files with linux and g++ 【发布时间】:2014-10-26 00:12:15 【问题描述】:

这是我的生成文件。我还想生成 .pdb 文件。我已经在使用 -g 选项,但是我没有看到任何使用 .pdb 扩展名创建的文件。帖子here 也声明使用-g 选项。

CXX = g++
CXXFLAGS = -Wall -g


all: comment \
     test


comment:
    @echo ------Starting Build Process-----------------


test:  main.o car.o student.o   house.o 
    $(CXX) $(CXXFLAGS) -o test main.o car.o student.o house.o

main.o: student.h house.h    main.cpp
    $(CXX) $(CXXFLAGS) -c main.cpp

car.o: car.h

student.o: student.h car.h

house.o: house.h 

clean:
    rm -rf *.o test

关于如何生成 pdb 文件有什么建议吗?

【问题讨论】:

见***.com/questions/866721/…和sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html 我正在使用objcopy --only-keep-debug test test.debug 如果我使用 .pdb 而不是调试,我会得到一个有效的 pdb 吗? 只要使用 'valid' 并不意味着 Microsoft 的专有文件格式 【参考方案1】:

我也想生成 .pdb 文件

您不能:PDB file format 是 Microsoft 专有且未记录在案的,因此不能由非 Microsoft 工具生成。

PDB 文件也不能在 Linux 上使用。换句话说,您生成 PDB 的愿望很可能是由于您缺乏了解。

【讨论】:

【参考方案2】:

请查看 Alexey Alexandrov 在How do I generate symbol information to use with Linux version of Intel's VTune Amplifier? 的回复:

对于任何从事生产软件的开发人员来说,另一个有用的考虑因素是使用separate debug information files!。假设如上所述使用“-g”编译程序,然后使用 objcopy 实用程序将包含调试信息的 ELF 部分复制到单独的文件中,并将原始二进制文件的链接添加到单独的调试信息文件中。这对于能够存储您发布给客户的位的调试信息非常有用,以便可以进行事后调试。当然,对于发布位的性能分析也是如此。

这是我所知道的 Microsoft 的 PDB 文件和 Linux 之间最接近的映射。

【讨论】:

以上是关于使用 linux 和 g++ 生成 pdb 文件的主要内容,如果未能解决你的问题,请参考以下文章

gcc 编译生成外部调试语法文件

Visual Studio 不生成.vshost.exe和.pdb文件的方法

pdb文件是啥?

为啥生成 pdb 文件会导致静态链接库的大小大幅增加?

发布生成 .pdb 文件,为啥?

使用 Visual Studio 2013 为本机 DLL 正确生成 PDB 文件