一、背景
由于公司相关项目的开发管理方式,导致公司会存在多个分支的版本正在开发/测试中。
在这样的背景下,我的日常工作中有时会出现存在某个分支的项目软件的某个功能出现了问题需要我去排查解决,而我当前并不在该分支上开发。于是只能安装出问题的包,然后使用VS的附加进程去DEBUG调试出现问题的代码。在附加进程的时候,还需要设置PDB的路径,而且有可能要设置多个路径。
但是,每次都要这样设置PDB的路径,是比较容易打断DEBUG的思路的。例如经常出现调试到某个地方,发现对应的更深层的模块还没有加载PDB,就要右键对应的模块,选择加载PDB,然后去构建机找到对应分支对应版本的目录选择模块的PDB路径。真的很麻烦!
所以我想,能否在附加进程前,我就设置好PDB的路径?
那么我把热门分支的每个版本的负责处理的相关模块的PDB目录都加进VS中,行不行?不行,先不说分支越来越多,每天都在构建新版本,我也加不过来,而且PDB路径过多也会导致后续VS搜索PDB的耗时过久。
于是我就在网上找相关的资料,找到了_NT_SYMBOL_PATH这个环境变量刚好可以满足我的需求。
二、相关资料
Windows 调试器的符号路径 - Windows drivers | Microsoft Learn
Symbol / PDB files in the Visual Studio debugger | Microsoft Learn
三、处理方式
我使用POWERSHELL编写了脚本,给脚本传入分支信息和版本信息后,脚本会通过这些信息将我所需要的PDB路径保存在_NT_SYMBOL_PATH中,然后,我再在POWERSHELL中启动VS即可。VS就会在寻找PDB文件时,使用_NT_SYMBOL_PATH指定的路径寻找,
例如
$pdbPath = "E:/1"
$pdbPath += ";"
$pdbPath = "E:/2"
$pdbPath += ";"
$pdbPath = "E:/3"$env:_NT_SYMBOL_PATH = $pdbPath
&"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\devenv.exe" "E:/test.vcxproj"
而且,这样子设置的_NT_SYMBOL_PATH只会对使用这个POWERSHELL窗口启动的VS生效,不会影响其它方式启动的VS窗口。所以,我也无需担心影响到其它VS搜索PDB时的效率。