内联函数中的断点未被触发

6 c++ inline breakpoints visual-studio

我有一个以下列方式声明的类:

#ifndef MYCLASS_H
#define MYCLASS_H

class MyClass : public MyOtherClass
{

public:
    MyClass();

    int a() const{ return _a; };
    int b() const{ return _b; };

private:
    int _a;
    int _b;
};

inline bool operator==( const MyClass& lhs, const MyClass& rhs )
{
    return (lhs.a() == rhs.a()) && (lhs.b() == rhs.b());
}

#endif
Run Code Online (Sandbox Code Playgroud)

我的问题是任何断点都是在重载的operator==永不被命中设置的,Visual Studio甚至告诉我执行永远不会达到这个功能.我已经遵循这个经验法则来重载比较运算符,但除了让它们成为非成员之外,它没有提及任何其他内容,所以我不确定我是否错过了运算符重载或内联函数.

任何人都可以告诉我为什么我的断点永远不会被击中?

Goz*_*Goz 11

您的断点永远不会被命中,因为编译器正在内联代码.在内联函数内设置断点可能意味着设置数百或数千个"虚拟"断点.跟踪内联代码的内容对于IDE来说是太多的工作,因此,它没有.

为了解决这个问题要么在调试中运行(我认为内联不会发生),要么不内联函数.

您还可以使用/ Od标志进行编译以禁用内联以及所有其他优化(这是它在调试中所做的).

设置/ Ob0标志应禁用内联发生.但是,出于性能原因,建议不要经常这样做,以便最好在调试中运行.