代码之家  ›  专栏  ›  技术社区  ›  smwikipedia

VS2015 C调试问题:当前不会命中断点。没有与此行关联的可执行代码

  •  2
  • smwikipedia  · 技术社区  · 6 年前

    我正在写一个C程序 Visual Studio 2015 .

    .lib 文件,

    .lib文件

    旗帜:

    /GF/Z7/Gm-/Gw型

    链接程序

    /诺洛戈/LTCG


    我的可执行文件由以下内容构建:

    旗帜:

    /GS-/TC/W4/Zc:wchar\t Z7/Gm/O1/Fd“C:\source\TEST2.pdb” /Fp“x64\TEST2.pch”/c/WX-/GS-/W4/Gs32768/D UNICODE/Od/GL-/Gy

    链接程序 旗帜:

    /输出:“C:\source\x64\Debug\TEST2.exe”/MANIFEST/NXCOMPAT /PDB:“C:\source\x64\Debug\TEST2.PDB”/DYNAMICBASE“kernel32.lib” “user32.lib”“gdi32.lib”“winspool.lib”“comdlg32.lib”“advapi32.lib” “shell32.lib”“ole32.lib”“oleaut32.lib”“uuid.lib”“odbc32.lib” “odbccp32.lib”/调试/计算机:X64/增量:否 /PGD:“C:\source\x64\Debug\TEST2.PGD”/MANIFESTUAC:“level='asInvoker' /清单文件:“x64\Debug\TEST2.exe.intermediate.manifest” /错误报告:PROMPT/NOLOGO/TLBID:1/NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcd.lib/NODEFAULTLIB:msvctd.lib


    一些 断点 在图书馆

    enter image description here

    所以我做了一些实验。

    .c 有上述问题的文件,我试图将断点对添加到 花括号和 括号 该文件中的C函数。

    我注意到对于某些函数,断点对 可能被击中 . 如下所示:

    enter image description here

    但后来我遇到了一个函数,它的断点在结束的括号里 不能被击中 . 如下所示:

    enter image description here

    所有后续功能 同样的问题。

    我查过了 thread .

    我使用 /Z7 所以没有PDB文件。 我猜 所有调试信息都嵌入到lib文件中。

    /Od 所以 优化不是我的方式。

    那会有什么问题呢?

    谁能给我点启示吗?谢谢。

    1 回复  |  直到 6 年前
        1
  •  0
  •   smwikipedia    6 年前

    ( 这不是答案 然而 这是现在的答案

    尝试1

    我试着用 /Zi vc140.pdb 文件(顺便说一句,lib文件的大小比 /Z7 情况)

    然后我调试我的应用程序。我试着把这个 vc140.pdb文件 符号文件窗口中的文件,如下所示:

    enter image description here

    但没用(这在某种程度上是意料之中的,因为VS2015怎么知道这个pdb文件是用于静态链接的lib的,而这个lib现在只是可执行文件的一部分。)

    尝试2

    有3个类似的场景,其中一个断点无法命中。

    场景1:

    调试器的目标代码类型与此行关联。

    enter image description here

    场景2:

    对于本文档。

    enter image description here

    当前不会命中断点。源代码不同

    enter image description here

    在调查过程中,我幸运地遇到了他们三个。

    http://www.wwwlicious.com/2016/02/28/how-to-load-debug-symbols-during-debugging/

    要修复3,请再次检查文件的版本是否正确。

    我相信debug符号一定是在1中加载的,这与2不同。 但是不知怎么的,调试符号信息在中间的某个地方被破坏了,这导致一些函数的断点是正常的,而另一些函数是不好的。

    尝试3

    根据错误描述,可能有两个最可能的原因:

    • 条件编译
    • 编译器优化

    我现在主要关注编译器优化。

    我准备好了 /Od 对于 cl.exe disable optimization

    我准备好了 /GL- cl.exe文件 禁用 whole program optimization .

    我移除 /LTCG 禁用 link time code generation 这也是一种全程序优化。

    尝试4---问题解决!!!

    最后,妈妈的祝福挽救了这一天! )

    根本原因是行尾风格!

    enter image description here

    在我规范化了线的结尾之后,所有断点现在都可以正常工作了!

    下面是以前无法到达的断点。

    enter image description here


    顺便说一句,我真的没想到微软visualstudio会坚持 CR LF 风格如此 严格地 .

    变得温和一点/聪明一点会痛吗?