4

我找不到在静态库项目上使用 Windows 调试工具中的源服务器工具的方法,该项目与实际使用该库的解决方案分开构建:“ssindex.cmd”的输出始终显示“零源” files found" 用于为库生成的 PDB 文件(使用编译器选项 /ZI 和 /Fd)。

在这个 PDB 上运行“srctool.exe -r”没有任何显示,这可能意味着 PDB 文件不包含任何源文件信息。在同样作为同一解决方案的一部分构建的测试应用程序的 PDB 文件上运行相同的命令会生成所有预期源文件的列表。

当静态库项目应该与使用它的解决方案分开构建时,有没有办法为静态库项目使用源索引?

感谢您的任何建议!

4

3 回答 3

4

您可以使用“/Save”和“/Load”选项分别存储和加载静态库的源信息。使用这些选项可以为您的库存储信息,然后在索引链接到您的库的项目时将其导入。

在为您的库解决方案编制索引时,您可以使用目录指定“/Save”标志,在该目录中存储有关库的源文件的索引信息。例如(假设您使用 Subversion 进行源代码控制),

ssindex.cmd /System=SVN /Save=c:\source\libproj\srcinfo /Source=c:\source\libproj /Symbols=c:\source\libproj\Release\*.pdb 

稍后为包含您的库的项目建立索引时,您可以使用包含库的源文件信息的目录指定“/Load”标志。例如,

ssindex.cmd /System=SVN /Load=c:\source\libproj\srcinfo /Source=c:\source\binproj /Symbols=c:\source\binproj\Release\*.pdb 

有两个潜在问题可能会影响您使用此技术的能力。首先,似乎某些源代码控制提供者可能不支持保存和加载源代码控制信息。我知道 Subversion 提供程序确实如此,并且看起来像 SourceSafe 提供程序那样,但我没有检查任何其他提供程序。

其次,这种技术似乎只适用于一个开箱即用的外部静态库。似乎没有办法从多个目录加载信息,并且每次使用“/Save”选项时脚本当前都会覆盖目录的内容。您可能可以编辑源代码控制提供程序模块以附加到保存目录中的文件而不是覆盖它们,但我还没有尝试过。

另外,请注意,如上所述,如果您的库是作为单独解决方案的一部分构建的,则仅需要执行此操作。如果静态库是您正在索引的解决方案的一部分,那么如果它们位于“/Source”选项指定的路径中,则将包含其源文件。

于 2010-12-28T18:09:19.677 回答
0

这可能意味着您在运行“ssindex”时没有输入正确的目录,因此对于 ssindex,您需要: /source=C:/SourceCode/ /symbols=C:/SourceCode/bin/Debug 我不确定是否“源”是否有一个大写的 S,但应该是它!

于 2009-10-09T08:29:09.487 回答
0

运行 svnindex.cmd 时,它总是告诉你“找到零个源文件”

在对 svn.pm(处理 svn 的 perl 模块)进行了痛苦的研究之后,我发现:

  1. 首先,svn.pm 调用“svn info -R $SourceRoot”来获取 $SourceRoot 中文件的所有版本信息(通过 /source 选项传递),

  2. 然后 svn.pm 将所有文件存储在使用本地文件路径作为键的字典中

  3. svnindex.cmd 调用 srctool -r 获取*.pdb中所有的源文件信息,并以源文件名作为key查询step2中保存的信息

问题是:

svn.pm 使用相对路径,但 *.pdb 使用绝对路径,所以你永远不会找到任何文件的 svn 日志信息,然后“找到零源文件”

修理:

更改 svn.pm 第 162 行:

$本地文件 = lc $1;

至   

$LocalFile = $SourceRoot 。“\”。1美元;#使路径绝对

于 2013-06-08T13:46:17.103 回答