Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 为什么windbg无法从我的pdb文件中读取符号?_Visual Studio_Security_Debugging_Windbg_Ollydbg - Fatal编程技术网

Visual studio 为什么windbg无法从我的pdb文件中读取符号?

Visual studio 为什么windbg无法从我的pdb文件中读取符号?,visual-studio,security,debugging,windbg,ollydbg,Visual Studio,Security,Debugging,Windbg,Ollydbg,我的pdb文件MFCLibrary1.pdb是由virtual studio 2017生成的,我将其放置在其原始目录G:\MFCLibrary1\Debug\,我设置了符号路径,windbg可以正常加载它,但是,我无法使用x MFCLibrary1读取任何符号信息*命令,如下图所示: link.exe对于大型项目来说,历史上一直非常缓慢,而事实证明,这种缓慢大部分来自生成PDB文件 Visual Studio 2017现在默认使用新的开关,该开关生成最小的PDB文件,并将其余调试信息保留在.

我的pdb文件
MFCLibrary1.pdb
是由virtual studio 2017生成的,我将其放置在其原始目录
G:\MFCLibrary1\Debug\
,我设置了符号路径,windbg可以正常加载它,但是,我无法使用
x MFCLibrary1读取任何符号信息*命令,如下图所示:


link.exe
对于大型项目来说,历史上一直非常缓慢,而事实证明,这种缓慢大部分来自生成PDB文件

Visual Studio 2017现在默认使用新的开关,该开关生成最小的PDB文件,并将其余调试信息保留在
.obj
文件中

这一选择的明显好处是成本低,但也有一些缺点

缺点#1-调试生成的PDB文件不再包含符号调试所需的所有信息

如果您计划在与构建项目的机器不同的机器上调试项目,则仍然需要生成完整的符号文件

这可以通过以下两种方式之一实现:

  • 通过运行Build->Build FULL program database file for solution,可以从VisualStudio的菜单将现有的FASTLINK PDB转换为完整的PDB

  • 通过在项目的链接器->调试属性页上将“生成调试信息”开关设置为
    /Debug:FULL
    ,可以永久更改它

  • 缺点#2-旧的工具,尤其是那些使用
    dbghelp.dll
    的工具,如WinDbg,不理解新的FASTLINK符号文件格式

    一些版本拒绝加载FASTLINK符号,另一些版本崩溃或挂起。这是对最新版本的最佳更新

    在我的机器上,FASTLINK符号与WinDbg版本10.0.15063.137配合使用效果良好,因此将调试工具更新到该版本或更高版本应该可以


    如果由于任何原因无法移动到调试工具的新版本,则按照上述方式生成完整的PDB是次优选项。不幸的是,这样做,您将看不到Visual Studio 2017带来的链接时间的改进。

    link.exe历来对于大型项目来说非常缓慢,而事实证明,大部分这种缓慢都来自生成PDB文件

    Visual Studio 2017现在默认使用新的开关,该开关生成最小的PDB文件,并将其余调试信息保留在
    .obj
    文件中

    这一选择的明显好处是成本低,但也有一些缺点

    缺点#1-调试生成的PDB文件不再包含符号调试所需的所有信息

    如果您计划在与构建项目的机器不同的机器上调试项目,则仍然需要生成完整的符号文件

    这可以通过以下两种方式之一实现:

  • 通过运行Build->Build FULL program database file for solution,可以从VisualStudio的菜单将现有的FASTLINK PDB转换为完整的PDB

  • 通过在项目的链接器->调试属性页上将“生成调试信息”开关设置为
    /Debug:FULL
    ,可以永久更改它

  • 缺点#2-旧的工具,尤其是那些使用
    dbghelp.dll
    的工具,如WinDbg,不理解新的FASTLINK符号文件格式

    一些版本拒绝加载FASTLINK符号,另一些版本崩溃或挂起。这是对最新版本的最佳更新

    在我的机器上,FASTLINK符号与WinDbg版本10.0.15063.137配合使用效果良好,因此将调试工具更新到该版本或更高版本应该可以


    如果由于任何原因无法移动到调试工具的新版本,则按照上述方式生成完整的PDB是次优选项。不幸的是,这样做,您将看不到Visual Studio 2017带来的链接时间的改进。

    源路径中的源代码,但它也无法切换到源代码模式调试!为什么?我使用
    symchk
    检查PDB文件和MFCLibrary1.dll,它成功了,但是在windbg中无法正常工作!为什么?我猜是
    /DEBUG:FASTLINK
    (VS2017的新默认值,仅指定
    /DEBUG
    )正在生成您的
    dbghelp.dll版本无法理解的符号。类似的问题也出现了。如果升级到最新的Windbg没有帮助,请查看指定
    /DEBUG:FULL
    是否有帮助,但会牺牲更长的链接时间。谢谢你,Sean Cline。你的回答是解决我问题的完美办法。你帮了我很多,再次衷心感谢你。@SeanCline,既然你的评论解决了这个问题,你能把你的评论转换成答案吗?这对阅读此线程的其他社区成员是有益的,我们可以关闭此线程。源路径中包含源代码,但它也无法切换到源代码模式调试!为什么?我使用
    symchk
    检查PDB文件和MFCLibrary1.dll,它成功了,但是在windbg中无法正常工作!为什么?我猜是
    /DEBUG:FASTLINK
    (VS2017的新默认值,仅指定
    /DEBUG
    )正在生成您的
    dbghelp.dll版本无法理解的符号。类似的问题也出现了。如果升级到最新的Windbg没有帮助,请查看指定
    /DEBUG:FULL
    是否有帮助,但会牺牲更长的链接时间。谢谢你,Sean Cline。你的回答是解决我问题的完美办法。你帮了我很多,再次衷心感谢你。@SeanCline,既然你的评论解决了这个问题,你能把你的评论转换成答案吗?这对阅读此线程的其他社区成员是有益的,我们可以关闭此线程。