【问题标题】:How WinDbg get to know source code?WinDbg 如何了解源代码?
【发布时间】:2013-12-06 10:02:26
【问题描述】:

我使 C++ 应用程序与 WinDbg 一起使用,并故意添加访问冲突运行时错误。

应用程序被编译为发布版本,然后我将 exe 从发布文件夹复制到桌面。仍然当我使用 WinDbg 并且应用程序崩溃时,它会打开我的源代码文件,显示突出显示的错误行。

我无法理解,WinDbg 是如何理解我的源代码文件路径的。

另外,当我从客户端获得故障转储时,可能是因为我没有可用的源代码。所以我想模拟真实世界的场景。

问候

【问题讨论】:

  • @VioletGiraffe 是的,你是对的。当我删除 pdb 文件时,WinDbg 中不显示源代码。请写为答案,以便我接受。
  • 如果你添加了路径,它只会打开源文件,它不会自动知道去哪里,pdb会显示编译时文件的原始路径,但这几乎总是除非你在同一台机器上,否则会失败。另外,源代码是什么意思? pdb 仅显示公共(如果没有剥离私有)符号,并允许调试器将偏移量转换回源行号。您看不到 pdbs 中的源代码
  • @EdChum 你是对的。实际上,我在有源代码和 WinDbg 的地方使用的是相同的。
  • @VioletGiraffe 但是在发布 exe 中使用 pdb 文件路径是否安全?
  • @pranitkothari:不确定您所说的安全是什么意思。它可能会根据 pdb 路径中的文件夹名称显示您的个人信息,但如果路径不包含以您的姓氏命名的文件夹 - 我看不出问题。

标签: c++ visual-studio-2010 debugging windbg crash-dumps


【解决方案1】:

按照我的理解,Visual Studio 编译器会为它创建的任何可执行文件生成一个 .pdb 文件(当设置了/DEBUG 标志时)。此 PDB(程序数据库)文件包含调试器将二进制模块中的地址与源代码匹配所需的信息(包括源文件的路径)。似乎 .pdb 的路径被硬编码到二进制文件中。因此,当您移动二进制文件本身时,调试器仍然可以找到 pdb,并从中找到源代码。

所有路径都可能是绝对路径,并且只能在编译二进制文件的 PC 上运行。

【讨论】:

【解决方案2】:

.pdb 具有源文件完整路径名信息。打开一个 .pdb 文件,您将看到如下行:f:\dd\vctools\crt\crtw32\stdcpp\locale0.cpp

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 2014-11-26
  • 2015-10-13
  • 1970-01-01
  • 2011-08-30
相关资源
最近更新 更多