GDB跳过我的代码!

J. *_*fer 2 c++ gdb

所以,我已经定义了一个类

DataLoggingSystemStateReceiver
{
DataLoggingSystemStateReceiver()
:   // initializer list
{
    // stuff
}

//  ... other functions here

};
Run Code Online (Sandbox Code Playgroud)

在main中,我实例化DataLoggingSystemStateReceiver,如下所示:

int main()
{
    // ... run stuff
    Sensor sensor(port, timer);

    DataLoggingSystemStateReceiver dlss();

    Log::notice("started");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我在gdb中单步执行此代码时,它运行:

Sensor sensor(port, timer);
Run Code Online (Sandbox Code Playgroud)

跳过

DataLoggingSystemStateReceiver dlss();
Run Code Online (Sandbox Code Playgroud)

并继续

Log::notice("started");
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?


编辑: 通过改变

DataLoggingSystemStateReceiver dlss();
Run Code Online (Sandbox Code Playgroud)

DataLoggingSystemStateReceiver dlss;
Run Code Online (Sandbox Code Playgroud)

在main()中,该行执行.有人可以解释原因吗?

Jam*_*lis 9

这个:

DataLoggingSystemStateReceiver dlss();
Run Code Online (Sandbox Code Playgroud)

不声明自动变量.它声明了一个名为的函数dlss,它不带参数并返回一个DataLoggingSystemStateReceiver.

你要:

DataLoggingSystemStateReceiver dlss;
Run Code Online (Sandbox Code Playgroud)

该对象将被默认初始化,因此对于您的类类型,将调用默认构造函数.

  • @sheep:不.这只是语法的一个缺点,它被称为"最令人烦恼的解析".编译器只是将其读作函数的声明,它与您的类无关. (7认同)