Visual Studio Express 2012调试模式不起作用

时间:2013-11-09 02:14:42

标签: c++ visual-studio debugging visual-studio-2012

我在Visual Studio中有一个项目,我已经工作了一段时间,我已经广泛使用了调试器。最近我改变了一些设置,我失去了停止程序和单步执行代码的能力。我无法弄清楚我所改变的可能会对此产生什么影响。

如果我在代码中设置断点并尝试让程序停在那里,那就不行了。断点显示白色,红色轮廓。如果我将鼠标悬停在它上面,它说 “断点当前不会被命中。调试器的目标代码类型的可执行代码与此行没有关联。可能的原因包括:条件编译,编译器优化或当前调试器代码类型不支持此行的目标体系结构。“

我知道程序执行断点所在的代码是因为我将断点放在InitializeComponent方法的开头。程序显示窗口正常,但不会在断点处停止。是的,我正在调试模式下运行。

似乎编译代码与显示的源代码之间存在脱节。有谁知道那会是什么,或者知道我应该检查哪些编译器设置来重新启用调试?

以下是编译器选项:

  

/ GS / analyze- / W3 / Zc:wchar_t   /I"D:\dev\libcurl-7.19.3-win32-ssl-msvc\include“/ Zi / Od / sdl   /Fd"Debug\vc110.pdb“/ fp:precise / D”WIN32“/ D”_DEBUG“/ D”_UNICODE“   / D“UNICODE”/ errorReport:prompt / WX- / Zc:forScope / Oy- / clr   / FU“C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ V4.5 \ mscorlib.dll中”   / FU“C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ V4.5 \ System.Data.dll中”   / FU“C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ V4.5 \ System.dll中”   / FU“C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ V4.5 \ System.Drawing.dll程序”   / FU“C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ V4.5 \ System.Windows.Forms.DataVisualization.dll”   / FU“C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ V4.5 \ System.Windows.Forms.dll的”   / FU“C:\ Program Files(x86)\ Reference   Assemblies \ Microsoft \ Framework.NETFramework \ v4.5 \ System.Xml.dll“/ MDd   / Fa“Debug \”/ EHa / nologo / Fo“Debug \”/Fp"Debug\Prog.pch“

链接器选项为:

  

/ OUT:“D:\ dev \ Prog \ Debug \ Prog.exe”/ MANIFEST / NXCOMPAT   /PDB:"D:\dev\Prog\Debug\Prog.pdb“/ DYNAMICBASE”curllib.lib“   “winmm.lib”“kernel32.lib”“user32.lib”“gdi32.lib”“winspool.lib”   “comdlg32.lib”“advapi32.lib”“shell32.lib”“ole32.lib”“oleaut32.lib”   “uuid.lib”“odbc32.lib”“odbccp32.lib”/固定:否/调试/机器:X86   / ENTRY:“Main”/ INCREMENTAL /PDD:"D:\dev\Prog\Debug\Prog.pgd“   / SUBSYSTEM:WINDOWS / MANIFESTUAC:“level ='asInvoker'uiAccess ='false'”   /ManifestFile:"Debug\Prog.exe.intermediate.manifest”   / ERRORREPORT:PROMPT / NOLOGO   /LIBPATH:"D:\dev\libcurl-7.19.3-win32-ssl-msvc\lib\Debug”   / ASSEMBLYDEBUG / TLBID:1

4 个答案:

答案 0 :(得分:0)

不要假装是一个完整的答案,但是 这里有一些想法:

  • 制作项目的备份副本(以防止进一步损坏)
  • 删除所有已编译的二进制文件和目标文件:整个Debug文件夹,也可能是其他内容。只留下源文件,项目文件和解决方案文件(以及资产,表格,数据库等,如果您使用它)。删除其他构建文件夹也是个好主意,例如Release
  • 重建项目
  • 确保调试器启动您期望的项目:在解决方案资源管理器中右键单击项目并选择Set as StartUp project
  • 确保调试器启动您期望的二进制文件:Project Properties - Debugging - Command
  • 关闭在VS中打开的所有文件。单击解决方案资源管理器,使用断点重新打开源文件。确保带有断点的源文件与编译期间使用的源文件相同:转到源文件夹并双击打开它。比较在编辑器中打开的文件和源文件夹中的文件的路径。还要确保在编译之前保存文件。
  • 尝试使用Step Into开始调试。然后点击Show next statement。如果它不会进入main()真正破碎的东西;(
  • 如果没有任何帮助,只需创建新项目,将源文件复制到其文件夹中,然后递归添加到新项目中。

以后如何预防:

为了防止在这种情况下造成时间损失,代码丢失和挫折,程序员使用Version control systems。它们允许以递增方式保存编码结果,您可以快速比较任意两个步骤,观察更改内容,并在需要时回滚。

最受欢迎的系统是:Subversion(SVN),Git,Mercurial(Hg)。所有你都可以集成到Visual Studio。

热爱您的代码,永不松散/破坏您的工作成果!

希望它有所帮助。快乐的编码! =)

答案 1 :(得分:0)

我遇到了类似的问题,通过将链接器选项“Debugging / Generate Debug Info”设置为“Yes(/ DEBUG)”解决了这个问题。 (虽然我看到你的链接器选项已经有了这个设置......)

答案 2 :(得分:0)

我是Visual Studio和C ++的新手,希望能为你提供线索。我的表达很差,所以我选择使用代码来表明我的痛苦。

#include <stdio.h>
#include <iostream>
class Circle
{
public:
    int x;
    Circle() {
        x = 2;
    }
};
int main() {
    Circle circle; 
    printf("%p\n", &circle);
    printf("yyy\n");
    system("pause");
    return 0;
}

这是一个非常简单的例子。但是如果你在main(){}中放置一个break指针(系统之前的任何一行(&#34; pause&#34;)),那么调试它。如前所述,它会警告你

  

当前不会触发断点。调试器的目标代码类型的可执行代码与此行无关。   可能的原因包括:当前调试器代码类型不支持此行的目标体系结构的条件编译,编译器优化。

但是,如果你将类Circle放在.h中,它将允许你调试main()。代码如下: Header.h

class Circle
{
public:
    int x;

    Circle() {
        x = 1;
    }
};

Source.cpp

#include <stdio.h>
#include <iostream>
#include "Header.h"
int main() {
    Circle circle; 
    printf("%p\n", &circle);
    printf("yyy\n");
    system("pause");
    return 0;
}

它的构造者制作了一个技巧。

答案 3 :(得分:0)

当编译器执行自动优化时,此行为是可行的。 您可以尝试禁用编译器优化并重新运行。

选择Project Properties -> C/C++ -> Optimization
在优化中,选择选项Disabled (/Old)

相关问题