我正在使用CMake命令安装PDB文件,以在我的C++应用程序的开发人员发行版中启用调试。命令如下:

INSTALL(DIRECTORY ${PROJECT_BINARY_DIR}/Debug
    DESTINATION bin
    FILES_MATCHING
    PATTERN *.pdb
)

此外,我设法将用于构建该开发人员发行版的相关源安装在同一级别的“src”文件夹中,因此我的顶级发行版文件夹如下所示:
include\
src\
lib\
bin\
share\
doc\
3rdparty\
etc\

如何让PDB文件“知道”源所在的位置(我假设这是必需的)?是否有可以实现此目标的CMake命令?这是一个小例子?

最佳答案

PDB文件将绝对路径名存储到源文件。当不使用符号服务器时,确保某种程度的源代码可重定位的唯一方法是使用subst命令。

这个想法是使用subst为源树的根创建驱动器字母名称(例如N:\)。然后从该驱动器进行构建,以便将以N:\开头的绝对路径嵌入到PDB文件中。以后需要在另一台计算机上调试可执行文件时,请在该计算机上使用subst获取到源的相同绝对路径。这将使PDB文件能够找到源文件。

例如,如果您有一个文件C:\MySources\main.cpp,请执行以下操作:

subst N: C:\MySources
N:
run your build

稍后,假设您需要在D:\Devel\Other\main.cpp中存储了相同文件的计算机上进行调试。只需执行subst N: D:\Devel\Other,然后从那里的N:驱动器开始工作即可。

该答案主要基于来自此question及其链接的信息。

08-26 20:01
查看更多