- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
昨天,我检查了我们公司的项目并更新了它们以修复我们配置它们的错误 (AFAIK)。
问题是在项目的属性页下,在 Configuration Properties -> C/C++ -> Output Files
下,我们将 Program Database File Name
设置为 $(OutDir)$(TargetName).pdb
,我们设置的 相同 值 配置属性 -> 链接器 -> 调试 -> 生成程序数据库文件
.
我的理解是,第一个属性设置 pdb 文件的位置,其中包含在编译源代码期间创建的目标文件的符号,而第二个属性设置包含生成的 DLL 符号的 pdb 文件的位置。对吗?
在这种假设下,为了防止它们发生冲突(我假设这是不需要的),我将第一个属性设置为 $(IntDir)$(TargetName).pdb
,但这破坏了生成的 pdb 文件(即调试器不将其识别为 DLL 的 pdb 文件,并且同事在其上运行了一个工具,并且签名与二进制文件中包含的签名不匹配)。
奇怪的是,使用值 $(IntDir)$(TargetName)2.pdb
(注意“2”后缀)修复了这个问题。我不明白为什么中间文件的名称很重要?
请注意,Configuration Properties -> C/C++ -> General -> Debug Information Format
设置为 Program Database (/Zi)
最佳答案
我会说你没看错:编译器生成目标文件。那时 DLL 还没有准备好,所以无论那个 PDB 文件包含什么,都对调试没有帮助。
链接器处理完编译器的输出后,DLL 就存在了。那时,PDB 对调试很有意义。因此用于调试目的的相关文件位于Linker -> Debugging -> Generate Program Database File
。
正如@HansPassant 在评论中提到的,不应触及编译器设置。可惜它已经发生了。在 Visual Studio 2013 或 2015 C++ 控制台应用程序中,C/C++ -> Output Files
的默认值为 $(IntDir)vc$(PlatformToolsetVersion).pdb
,因此最终名称类似于 Debug\vc120.pdb
或 Debug\vc140.pdb
。
恕我直言,只要名称不与链接器设置冲突,更改编译器的输出文件应该无关紧要。这正是您遇到的情况:编译器名称 $(IntDir)$(TargetName).pdb
(相对路径)解析为与链接器名称相同的文件 $(OutDir)$(TargetName .pdb
(绝对路径)。在那种情况下,链接器可能无法写入文件,因为它仍在被编译器或其他奇怪的事情使用。
关于c++ - 使用 Visual Studio 2013 为 native DLL 正确生成 PDB 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33292241/
我正在启动一个 web api 项目,当我尝试在逻辑层(这是一个单独的 csproj)中设置断点时我注意到了这个问题,它显示了未经验证的断点。 深入研究后,我发现调试控制台显示“无法找到或打开 PDB
我已经下载了 FreeImage 源代码并自己为 X64 MT DLL 进行了静态构建。 一切正常,除了当我在 freeimage.lib 文件中使用链接时,我收到很多烦人的链接器警告,我不太了解原因
Ubuntu 16.04 Python 3.5.2 如果我运行 python,在 virtualenv 中,我会得到 Python 3.5.2。 问题是: (photoarchive) admin@s
在 pdb 模式下,我经常想单步执行一个函数。这是一个说明我可能会做什么的情况。给定代码: def f(x): print('doing important stuff..') res
我有父进程调用它的子进程。我把 import pdb; pdb.set_trace() 进入子进程代码。 当我使用 python -m pdb parent.py 启动父级时,它被卡住了。调试器不响应
这个问题在这里已经有了答案: Cannot find or open the PDB file in Visual Studio C++ 2010 (7 个答案) 关闭 8 年前。 我正在使用最近升
我对 python 和 pdb 比较陌生,但我对 gdb 有很多经验。 我的问题是,如果我在某个时候在我的代码中设置了一些断点,我将想要更改某些内容并重新运行我的调试 session ,同时保留这些断
我对编译器和链接器 PDB 文件分别有什么区别感到困惑(即在 Visual Studio 中,Project Properties > C/C++ > Output Files >程序数据库文件名 v
我有一个 PDB 文件列表。我想使用 BioPython 中的 Bio.PDB 模块提取所有文件的配体(因此,杂原子)并将每个单独保存到 PDB 文件中。 我尝试了一些解决方案,例如:Remove h
尝试使用 pdb 调试我的基于 python 的 roguelike。我想弄清楚的是,函数handle_keys()是否像我所问的那样返回0。我有另一个函数没有按预期运行,所以我试图找出问题发生的地方
我有私有(private) pdb 文件,我必须将其转换为公共(public)文件。有工具吗? 最佳答案 使用PDBCopy . pdbcopy 是 Windows 调试工具的一部分,可通过 Wind
在静态编译的链接阶段在 Windows 上构建时可能会出现 LNK4099 警告。 例如使用 nmake 和 VC10 进行构建时,我收到一连串 LNK4099 警告,例如: libcurl_a_de
我的 Visual Studio 2013 ASP.NET webform 应用程序有 3 个 DLL 程序集。调试时,DLL 和 PDB 仅在三个 DLL 中的两个(项目/VB 模块和一个 C# 模
我有一个 Python 程序,里面有一个函数 foo()。 我使用 PDB 运行程序,并在程序中某处的任意断点处停止。 现在,我可以很容易地从 PDB 中调用 foo(),我只需键入: !foo()
我正在尝试使用 this tutorial 学习 pdb引用自 another stackoverflow question ,我正处于“入门”部分的第 3 步。 In [12]: %paste #
我有 DLL,并且有用于创建 DLL 的确切源代码。当我们从客户那里获得转储文件时,我希望我们的本地符号服务器能够工作。 (在我们产品的下一个补丁/版本之前无法在客户站点更新 DLL) 最佳答案 这似
这个问题可能真的很愚蠢,但就是这样。以下语句触发特定电子邮件的异常: File "/Users/me/tools/maildir-deduplicate/maildir_deduplicate/m
在从我的旧 XP 移动到新的 vista PC 后,我在 VS2005 中的一个旧项目中收到以下几个警告: UnitTest++.vsnet2005.lib(TestRunner.obj) : 警告
我正在尝试使用 Visual Studio 编译 Qt 4.8.6 项目(我使用的是用于 Qt4.8.6 的 visual studio 插件)。我在调试和 Release模式 (-debug-and
我想用ipdb而不是 pdb与 py.test --pdb选项。这可能吗?如果是这样,如何? 显然,我可以使用 import ipdb; ipdb.set_trace()在代码中但需要运行测试,观察它
我是一名优秀的程序员,十分优秀!