C++ Visual Studio c++;-程序在没有调试器的情况下失败,使用调试器可以正常工作

C++ Visual Studio c++;-程序在没有调试器的情况下失败,使用调试器可以正常工作,c++,C++,当我运行调试器时,即使没有断点,我的程序也会完全按照需要执行 当我在没有调试的情况下运行时,会出现调试错误 “此应用程序已请求运行时以异常方式终止它。” 有一次,我调用了一个函数,该函数设置了一个名为currCode(整数)的变量 如果我在这一行和下一行之间添加一组变量currCode,无论是否使用调试器,程序都可以正常工作 currCode = function(); cout << currCode; //this works! currCode=function(); cou

当我运行调试器时,即使没有断点,我的程序也会完全按照需要执行

当我在没有调试的情况下运行时,会出现调试错误

“此应用程序已请求运行时以异常方式终止它。”

有一次,我调用了一个函数,该函数设置了一个名为
currCode
(整数)的变量

如果我在这一行和下一行之间添加一组变量
currCode
,无论是否使用调试器,程序都可以正常工作

currCode = function();
cout << currCode; //this works!
currCode=function();

cout可能会尝试关闭优化,看看是否仍然存在问题。

在直接从可执行文件运行的程序和由调试器运行的程序中出现错误的原因有很多。以下是一些常见的问题:

  • 未初始化变量
  • DLL地狱
  • 时机
  • 堆或堆栈管理
  • 同样,以上是最常见的

    未初始化变量 许多调试器会无意中为您初始化变量。直接从可执行文件运行的程序可能无法按预期方式初始化变量区域。在嵌入式系统领域,这通常意味着根本不需要因此,养成初始化所有变量的习惯,最好在声明变量时初始化。

    DLL地狱 调试器很好,希望为您提供良好的体验,因此在执行程序之前,调试器会加载大量共享或动态链接的库。其中一些库必须显式加载

    时机 通常不常见,但不使用调试器执行的程序与使用调试器全速运行的程序的运行速度不同。这可以使延迟环(自旋环)具有不同的特性。使用调试器时,数据缓冲区的填充时间可能更长。如有疑问,请在发布版本中使用打印声明,以帮助缩小问题的范围

    堆或堆栈管理
    调试器通常提供代码来保护您的程序免受堆栈、堆和其他内存区域的溢出。这项功能可以检测通配符并从无效地址访问数据。此外,调试器希望保护操作系统提供给它们的少量内存(它们必须与您的程序共享内存)。在没有调试器的情况下运行的程序可能会在没有任何检测或生成错误的情况下弄乱堆栈和堆。

    您可以发布
    函数()的代码吗?
    --出现这种情况的原因有很多,其中大多数都是围绕单位化变量,或者调试版本中添加的堆栈和变量边界。如果没有更多信息,将无法提供帮助。是否可以使用未初始化的变量?(我在C语言中肯定有过这样的经历,在C语言中,打印变量使循环工作,但删除printf使循环再次中断!)。(啊,我迟到了一点-Chad说了什么!)我实际上无法发布完整的代码:-(如果将
    \u NO\u DEBUG\u HEAP=1
    添加到项目属性->配置属性->调试->环境中,它会崩溃吗?
    currCode = function();
    cout << currCode; //this works!