none
在Visual Studio 2005中,为什么在UT环境下使用调试运行和非调试运行的结果不一致 RRS feed

  • 问题

  • 我在Visual Studio 2005中搭建了一个UT测试环境,但是在该环境中,我对代码执行单元测试的时候,开启调试和不开启调试运行结果不一致。直接运行的时候在指定位置报上错误,但是在该位置打断点进行调试跟踪的时候它的结果却又正常了。我不知道是怎么回事,特来此求助。
    在Visual Studio 2005中,开启调试运行和不开启调试运行有什么地方不一样?是否有可能不开启调试运行会出现符号表加载错误的情况,导致数据地址读取错误的情况?

    2009年10月9日 12:23

答案

  • 呵呵,谢谢,已经照到原因了,由于版本更新,一个变量没有初始化就使用才出现的。
    至于其根本原因在于,在调试状态下,调试器会对变量进行自动初始化操作。而非调试状态下分配的内存为直接使用。才出现这样的情况。对该变量进行初始化之后就正常了。
    2009年10月12日 13:19

全部回复

  • 使用release模式下,VC会默认优化,有可能会改变源代码,而且不会加入调试信息在程序中,在release模式下运行,无论是断点还是代码中的变量值,都是没有参考价值的。
    所以要单步执行和查看变量值,是需要有调试信息的。建议在dubug模式下进行。
    2009年10月10日 2:57
  • 但是我在单步运行进行跟踪的时候其运行结果与非调试状态下运行结果完全不一致。
    仅仅是在其中一个函数中加入打印语句就导致了20个测试用例无法通过。百思不得其解!
    2009年10月10日 11:41
  • 有没有使用多线程?是否可能多线程而导致的结果不一致?

    2009年10月12日 1:58
  • 呵呵,谢谢,已经照到原因了,由于版本更新,一个变量没有初始化就使用才出现的。
    至于其根本原因在于,在调试状态下,调试器会对变量进行自动初始化操作。而非调试状态下分配的内存为直接使用。才出现这样的情况。对该变量进行初始化之后就正常了。
    2009年10月12日 13:19