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

Visual Studio-是否可以是从代码调用的断点?

  •  31
  • danatel  · 技术社区  · 15 年前

    我有一个基于UnitTest++的单元测试项目。我通常在代码的最后一行放置一个断点,以便在其中一个测试失败时检查控制台:

      n = UnitTest::RunAllTests();
      if ( n != 0 )
      {
      // place breakpoint here    
        return n;
      }
      return n;
    

    但是每次我从SVN重新签出代码时都必须重新插入它。可以吗 在某种程度上由编译器放置断点?:

          n = UnitTest::RunAllTests();
          if ( n != 0 )
          {
          // place breakpoint here    
    #ifdef __MSVC__
            @!!!$$$??___BREAKPOINT;
    #endif
            return n;
          }
          return n;
    
    6 回复  |  直到 15 年前
        1
  •  58
  •   Gregory Pakosz    11 年前

    使用 __debugbreak() 内在的(需要包含 <intrin.h> )

    使用 {除错() 最好是直接写 __asm { int 3 } 因为在编译x64体系结构的代码时不允许使用内联程序集。

    据记录,在Linux和Mac上,使用gcc,我正在使用 __builtin_trap() .

        2
  •  18
  •   Clinton Pierce    15 年前
    DebugBreak(void)
    

    来自WiBase.H.

    MSDN

        3
  •  8
  •   Indy9000    15 年前

    你可以在C或C++中使用这个

    __asm
    {
        int 3
    }
    
        4
  •  3
  •   foraidt    15 年前

    如果您使用的是VC6(是的,过时了,但在某些地方/项目中仍在使用)。 DebugBreak() 将工作,但您可能会结束在一些模糊的位置深与Windows DLL,从中您必须走回您的代码堆栈。

    所以我才用 ASSERT() 在MFC或 assert() 在“标准”代码中。

    您的示例如下所示:

    n = UnitTest::RunAllTests();
    ASSERT(n == 0);
    //assert(n == 0);
    return n;
    

    如果您不需要一个结果,只希望它用于调试,您也可以这样做

    if(0 != UnitTest::RunAllTests())
    {
        ASSERT(FALSE);
        //assert(false);
    }
    
        5
  •  0
  •   Cody C    15 年前

    如何使用调试或跟踪方法输出控制台信息?这可能比依赖断点更好。

        6
  •  0
  •   mrjoltcola    15 年前

    您多久从SVN签出一次该项目?这通常是我每个项目只做一次的事情,或者当我重建我的电脑时。

    如果还签入项目文件,则断点应存储在项目文件中。

    我想它在.suo文件中。如果你愿意的话,你也可以把它放在SVN控制之下,尽管我不喜欢。