代码之家  ›  专栏  ›  技术社区  ›  Joel in Gö

VisualStudio bin\debug文件夹中的PDB文件

  •  10
  • Joel in Gö  · 技术社区  · 17 年前

    我有一个VisualStudio(2008)解决方案,它由几个项目组成,而不是所有项目都在同一名称空间中。当我构建解决方案时,顶层项目使用的所有DLL文件, 最高工程 TopProject\bin\debug NDepend .

    Visual Studio如何决定将哪些.pdb文件复制到更高级别的bin\debug文件夹中?我怎样才能让Visual Studio也复制其他文件?


    最高工程 debug 文件夹正确。

    4 回复  |  直到 7 年前
        1
  •  11
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前

    MSDN :

    程序数据库(PDB)文件保存 调试和项目状态 允许增量更新的信息 链接的调试配置 当您使用编译C/C++程序时 /ZI或/ZI或视觉 /调试。

    然而,如果不是这样的话,它将变得更加棘手。也许你们都处于发布或调试模式。现在您需要查看每个项目的命令行编译选项(在项目属性中指定)。如果需要调试器,请相应地将其更新为/debug,如果不需要,请将其删除。

    是的,DLL文件“知道”它们有PDB文件,并且有指向它们的路径,但这并不意味着太多。正如其他人提到的那样,仅将DLL文件复制到给定目录并不能解决此问题。您还需要PDB文件。

    在Windows中复制单个文件时,除了某些“bundle”类型的文件(我不知道Microsoft的术语,但“完整的HTML包”是概念)不会复制相关文件。DLL文件不是以“捆绑”方式组装的,因此复制它们会留下它们的PDB文件。

    我想说的是,你唯一的答案是更新你的进程,把DLL文件放到那些中心位置,并包括PDB文件。。。不过,我很想被证明是错的!

        2
  •  3
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前

    首先,不要做任何假设。清理解决方案,在调试模式下重建,并检查是否创建了所有PDB文件。如果不是,那就是你的问题。

    如果它们已创建,但没有全部被复制,则可以通过创建一个生成后事件来绕过此问题,该事件手动将PDB文件复制到所需的位置。当然,这只是一个解决办法。


    编辑以响应编辑 :

    如果您只是手动复制周围的内容,那么也可以手动复制PDF文件。我相信DLL文件不应该“知道”任何关于PDB文件的信息。把它们放在目的地目录里,然后去喝杯咖啡。放松

        3
  •  3
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前

    清洁溶液时,检查溶液是否已清洁。

    bin\debug 即使在清理之后,目录也会被删除。删除 所有项目上的目录并重新生成。

        4
  •  3
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前

    正如其他帖子所说,您可能有编译器/损坏问题。

    但是,正如Will所说,如果PDB文件正在创建,但没有显示在您想要的位置,那么创建一个后期构建步骤。以下是我为解决方案中的每个项目定义的构建后步骤。它确保所有输出文件都复制到一个公共目录中。

    因此,\SolutionDir\Bin现在在一个位置包含所有输出文件。

    xcopy /r /y $(TargetPath) $(ProjectDir)..\$(OutDir)
    if $(ConfigurationName) == Debug xcopy /r /y $(TargetDir)$(TargetName).pdb $(ProjectDir)..\$(OutDir)