【问题标题】:Can source server (Debugging Tools for Windows) be used with static library projects?源服务器(Windows 调试工具)可以与静态库项目一起使用吗?
【发布时间】:2009-07-28 08:18:08
【问题描述】:

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

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

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

感谢您的任何建议!

【问题讨论】:

    标签: static srcsrv


    【解决方案1】:

    您可以使用“/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”选项指定的路径中,则将包含其源文件。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 路径名问题不是我的问题。我使用 msdn 的 dia2dump 工具发现了以下内容: 对于二进制项目(EXE 或 DLL)的 PDB,dia2dump 的输出包含标有“找到的表:SourceFiles”的部分中的源文件列表。对于为静态库项目生成的 PDB 文件,相应的部分似乎总是空的。所以我想这就是为什么“ssindex”不适用于静态库项目的原因。但我不知道为什么这些信息不包含在 PDB 中,也没有找到任何“解决”这个问题的编译器设置。
      【解决方案3】:

      当运行 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 行:

      $LocalFile = lc $1;

      对  

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-30
        • 1970-01-01
        • 2013-05-20
        • 1970-01-01
        • 2014-12-25
        • 1970-01-01
        • 2010-11-04
        相关资源
        最近更新 更多