我找不到在静态库项目中使用Debugging Tools for Windows中的源服务器工具的方法, 它与实际使用该库的解决方案分开构建: “ssindex.cmd”的输出始终显示为库生成的PDB文件“找到零源文件” (使用编译器选项/ ZI和/ Fd)。
在此PDB上运行“srctool.exe -r”不显示任何内容,这可能意味着PDB文件不包含任何源文件信息。 在测试应用程序的PDB文件上运行相同的命令,该文件也构建为同一解决方案的一部分 产生所有预期源文件的列表。
是否有一种方法可以为静态库项目使用源索引,因为它应该与使用它的解决方案分开构建?
感谢您的任何建议!
答案 0 :(得分:3)
您可以使用“/ 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”选项指定的路径中,则将包含其源文件。
答案 1 :(得分:0)
这可能意味着你在运行“ssindex”时没有输入正确的目录,所以对于ssindex你需要:/ source = C:/ SourceCode / / symbols = C:/ SourceCode / bin / Debug我不是确定“来源”是否有大写字母S,但应该是它!
答案 2 :(得分:0)
运行svnindex.cmd时,它总是告诉你“找到零源文件”
经过svn.pm的痛苦挖掘(用于处理svn的perl模块)后,我发现:首先,svn.pm调用“svn info -R $ SourceRoot”来获取$ SourceRoot中文件的所有版本信息(通过/ source选项传递),
然后svn.pm将所有文件存储在使用本地文件路径作为键的字典中
svnindex.cmd调用srctool -r获取* .pdb中的所有源文件信息,并使用源文件名作为查询步骤2中保存的信息的密钥
svn.pm使用相对路径,但* .pdb使用绝对路径,因此您永远不会找到任何文件的svn日志信息,然后“找到零源文件”
修正:
更改svn.pm第162行:
$ LocalFile = lc $ 1;
到
$ LocalFile = $ SourceRoot。 “\”。 lc $ 1; #make path absolute