2011-09-29 51 views
7

每默认情况下,编译在释放模式Visual Studio项目时,到PDB的完整路径放入图像文件,如:地带的路径PDB

c:\myprojects\demo\release\test.pdb 

使用无证链接器开关( /pdbpath:none)人可以强迫Visual Studio 2008中,以减少PDB的完整合格的名称,例如:

test.pdb 

我需要做同样与使用VC6 仍然建的项目。

我在项目设置级尝试了“/pdbpath:none”开关,但连接器抱怨这个未知开关。

有没有人知道一个方法(或工具)来完成这个或者当在图像级别直接链接VC6项目或之后?

+0

此开关可用(记录)开始,Visual Studio 2010中 – mox

+0

这个开关也与Visual Studio 2008 – mox

+0

工作有一个工具,称为peupdate([网站在这里](http://bytepointer.com/tools/index .htm#peupdate)),它将删除,剥离或以其他方式将此PDB字符串更改为EXE或DLL的任意值。对于您的特定问题,您可以使用“-s”(strip)选项删除路径,但保持文件名不变。 – byteptr

回答

2

最好的办法是直接使用MS的pdbstr.exe。它允许直接提取,更新和混用其他函数,独立于编译器版本(直到上个支持的版本,我认为它现在是VS2013)。我们使用它将SVN链接直接添加到PDB,然后使用srctool将其存储在本地符号存储中。

+0

谢谢!有趣的是,该实用程序使用备用数据流(ADS)...“将版本控制信息插入到目标.pdb文件的”srcsrv“备用流中。 – mox

+0

示例命令行将使用pdbstr.exe?即使有文档,我也无法弄清楚如何去除路径。 – byteptr

+0

@byteptr对不起,回复晚了。我们使用Poweshell Script在临时流文件($ streamContent)中构建新块,然后直接调用可执行文件,如下所示: 。 “$ ToolPath”/pdbstr.exe -w -s:srcsrv“-p:$ pdbFullName”“-i:$ streamContent” 这会将给定的流作为srcsrv流添加到$ pdbFullName中指定的pdb中,该pdb包含路径和所有这一切。 – Woody14619

0

对于较新版本的link.exe版本,语法已更改。

你想要的选项现在/pdbaltpath:%_PDB%

据记载在MSDN:https://msdn.microsoft.com/en-us/library/dd998269.aspx

%_PDB%扩展到实际的.pdb文件的文件名,不带任何路径信息

对于VC6,您可能希望继续使用相同的编译器,但是新版本的link.exe

Windows驱动程序工具包还附带一个名为binplace.exe的工具,它可以在构建后修改此信息。

+0

对于静态库,这似乎已被破坏。LNK4044:无法识别的选项'/ pdbaltpath:%_ PDB%';忽略 – syplex

+0

@syplex:你使用的是什么版本的链接器?静态库与你的问题有什么关系? –

+0

尝试了几个版本。截至版本14.12.25835.0。试图找出如何指定或更改静态库的PDB路径。该路径嵌入到.lib中,就像它用于DLL/EXE(虽然不同),但无法修改它。我希望像PDBALTPATH这样的工作,但没有发现任何东西。 – syplex