WinDbg如何了解源代码? 我使用C++应用程序与WEBBG一起使用,并有意添加访问冲突运行时错误。

WinDbg如何了解源代码? 我使用C++应用程序与WEBBG一起使用,并有意添加访问冲突运行时错误。,c++,visual-studio-2010,debugging,windbg,crash-dumps,C++,Visual Studio 2010,Debugging,Windbg,Crash Dumps,应用程序被编译为发布版本,然后我将exe从发布文件夹复制到桌面。但当我使用WinDbg时,应用程序崩溃,它会打开我的源代码文件,显示突出显示的错误行 我无法理解WinDbg如何理解我的源代码文件路径 另外,当我从客户端获得崩溃转储时,可能是因为我没有可用的源代码。所以我想模拟真实世界的场景 按照我的理解,Visual Studio编译器会为它创建的任何可执行文件生成一个.pdb文件(当设置了/DEBUG标志时)。此PDB(程序数据库)文件包含调试器将二进制模块中的地址与源代码匹配所需的信息(包括

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

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

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


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


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

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

@VioletGiraffe是的,您是对的。当我删除pdb文件时,源代码不会显示在WinDbg中。请写为答案,这样我就可以接受它。它只会打开源文件,如果你添加了路径,它不会自动知道在哪里查找,pdb会显示文件的原始路径在哪里编译时,但这几乎总是会失败,除非你是在同一台机器上。你说的源代码是什么意思?PDB仅显示公共(如果不是剥离的私有)符号,并允许调试器将偏移量转换回源行号。您没有从中看到源代码pdbs@EdChum你是对的。事实上,我在使用源代码和WinDbg的地方也使用了相同的方法。@VioletGiraffe但是在release exe中使用pdb文件路径安全吗?@pranitkothari:不确定你说的安全是什么意思。它可能会根据pdb path中文件夹的名称显示您的个人信息,但如果路径中不包含以您姓氏命名的文件夹-我看不出有问题。+1对于所有路径可能都是绝对的,并且只在编译二进制文件的PC上工作。您可以重建pdb以使用网络共享甚至源代码管理系统(tfs svn等)从Microsoft阅读此示例,您将知道.pdb中包含哪些信息以及如何读取和解析.pdb。