问题标签 [pdb-files]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3763 浏览

windows - PDB 文件故障转储 user.dmp

我有一个应用程序崩溃,因此它在 Windows 平台中生成一个崩溃转储。我将 exe 和 dll 文件发送给客户。客户已将 user.dmp 和 drwtsn32.log 文件发送给我。但是,客户没有相应的 pdb 文件。客户只有 dll 和 exe 文件。因此,当我将此 user.dmp 文件附加到 Windbg 时,我没有得到符号。那么,我需要做什么才能获得符号。我需要将 pdb 文件发送给客户吗?如果是,那么当崩溃发生时他需要对这些 pdb 文件做什么?我使用三种不同的机器:a)构建机器,c)客户的测试机器和 c)我自己的调试机器(与构建机器不同)。windbg安装在调试机上。我可以将所有 pdb 文件从构建机器复制到我的调试机器中。请告诉我,

谢谢康康

0 投票
1 回答
835 浏览

.net - 生成调试信息 (pdb) 是否会使我的应用程序在运行时变慢?

在 .NET 应用程序中生成调试信息 (pdb) 使我的应用程序在运行时变慢?还是它们仅在应用程序崩溃时才起作用?

0 投票
1 回答
2533 浏览

visual-c++ - 如何使用符号在发布模式下构建 OpenSSL?

我通常通过这样做来构建我的 openssl 库:

对于调试小型转储,我想为 2 个 dll 获取一个 pdb 文件(同时仍以“发布”模式构建它们)。我已将 /Zi 添加到 ms\ntdll.mak 的 CFLAGS 部分,但是当我查看 Visual Studio 调试器中的内存模块时,我仍然得到“二进制文件不是使用调试信息构建的”。我错过了一步吗?

谢谢

0 投票
4 回答
20095 浏览

windows - 如何更改年龄不匹配的 PDB 以正确匹配?

我们的夜间构建过程被破坏了很长时间,以至于它生成的 PDB 文件与相应的图像文件的年龄相差几个小时。我已经解决了这个问题。

但是,我想开始使用符号服务器,但由于必须使用这些年龄不匹配的 pdb 文件而不能。我通过在 windbg 中使用 .symopt +0x40 方法解决了这个问题。这意味着我必须手动组织我所有的 pdb 文件,并且经过多年的发布,这些文件加起来。

我正在寻找一种方法来修改 windbg 用来标记 pdb 年龄的机制,并强制它与我的图像文件匹配。实用程序ChkMatch执行类似的操作,但用于 pdb 签名。开发人员在页面“ChkMatch 能够使可执行文件和 PDB 文件匹配,如果它们具有不同的签名但相同的年龄(有关 PDB 签名和年龄的更多信息,请参阅本文)。如果年龄不同,该工具无法使文件匹配。”

我查看了 hexeditor 内部,甚至找到了与年龄相对应的位,但它必须在内部提取更多技巧,因为我无法让它工作。

有任何想法吗?

编辑:我不知道这是否有帮助,但在我的特殊情况下,年龄差异是由不必要的重新链接 dll 引起的,这也会重新创建 PDB 文件。但是,我们的构建过程是存储原始 dll(重新链接之前)和重新链接之后的 pdb。我想过以某种方式手动重现这种情况。意思是,强制重新链接 DLL,但在两种情况下都保存 pdb。然后我可以对这两个文件进行二进制比较,看看它们是如何变化的。也许运行某种自动执行此操作的修补软件?通过查看我的控制案例中究竟发生了什么变化,也许我可以对保存在我公司构建过程中的 DLL 和 PDB 做同样的事情?

编辑:我想通了!!!!感谢对第一个答案的评论之一,我查看了“未记录的 Windows 2000 秘密:程序员食谱”一书的 pdf 链接。作者详细介绍了 pdb 文件格式。正如我之前所说,我已经将 pdb 加载到十六进制编辑器中并翻转了一些位,似乎我进行了年龄/签名匹配,但它不起作用。好吧,在使用 W2k 机密书中的实用程序将 pdb“爆炸”到包含的流中之后,我发现它们在流 3 中隐藏了另一个对年龄的引用!!!!!!!!!!一旦我也翻转了那个,它就在windbg中匹配了。这是巨大的!!!!非常感谢....符号服务器我来了!

0 投票
4 回答
29045 浏览

c# - 调试 DLL 的发布版本(使用 PDB 文件)

如果我有一个 DLL(在发布模式下构建)和相应的 PDB 文件,是否可以调试(单步执行)该 DLL 中包含的类/方法?

如果是这样,需要哪些步骤/配置(例如,将 PDB 文件放在哪里)?

编辑:

如果 PDB 文件与 DLL 位于同一位置(在简单控制台测试应用程序的 bin/debug 目录中)。我可以看到 DLL 的符号已加载(在“输出”窗口和“模块”窗口中),但我仍然无法进入该 DLL 的方法。

这可能是编译器优化的结果(正如迈克尔在他的回答中所描述的那样)?

0 投票
5 回答
121217 浏览

gcc - 如何在构建目标之外生成 gcc 调试符号?

我知道我可以使用 -g 选项生成调试符号。但是,该符号嵌入在目标文件中。gcc 可以在结果可执行文件/库之外生成调试符号吗?就像 windows VC++ 编译器的 .pdb 文件一样。

0 投票
7 回答
10623 浏览

.net - 将 PDB 调试文件留在实时服务器上是否存在任何安全问题?

将 .NET PDB 文件保存在真实服务器上是否存在任何安全问题?

我知道抛出异常可能需要更长的时间,但是在正常执行期间谁会抛出异常呢?:-)

但是从安全的角度来看呢?有什么问题吗?

0 投票
4 回答
6038 浏览

debugging - 在发布模式下从 pdb 获取行号

调试器(或 CLR 异常处理程序)是否可以使用 pdb 显示在发布模式下发生异常的行?

发布模式下的代码经过优化,并不总是遵循“原始”代码的顺序和逻辑。

令人惊讶的是,即使在发布模式下,调试器也可以逐步浏览我的代码。优化应该使导航非常不舒服。

能否请您为我澄清这两点?

0 投票
2 回答
1927 浏览

windows - 从 exe/pdb 获取有关可执行代码的信息

我需要从经典的 win32 exe/dll 文件中提取代码(但不是数据!)。很明显,我不能仅通过提取代码段内容来做到这一点(因为代码段也包含数据——例如跳转表),并且我需要编译器的一些帮助。

*.map 文件很好,但它们只包含函数的地址,即我能做的最安全的事情是从该地址开始并处理直到第一个返回/跳转指令(因为函数的一部分可以被提及数据)

*.pdb 文件更好,但我不确定使用什么工具来提取这样的信息——我查看了 DbgHelp 和 DIA SDK,后者似乎是正确的工具,但看起来不是很简单. 所以我的问题/问题:

  1. 据您所知,是否可以仅通过 DbgHelp 提取有关代码/数据位置(地址 + 长度)的信息?
  2. 如果 DIA SDK 是唯一的方法,知道我应该调用什么来获取这样的信息吗?(COM的东西很重)
  3. 还有其他方法吗?

当然,我首先关心的是 Visual Studio,C/C++ 源代码编译。

感谢您的任何提示。

0 投票
1 回答
264 浏览

visual-studio-2005 - pdb 程序数据库中没有文件名

我有一个来自在 Windows VS2005 上调试编译的 C++ 应用程序的 .pdb 程序数据库。我使用 DIA SDK 来查找函数名称,但似乎无法检索符号的文件名。

我需要打开一些开关吗?这行得通吗?!