断点不在特定方法上执行

问题描述 投票:0回答:0

我已经用 C++20 模块设置了我的应用程序的基础。我遇到的问题是,在我的一个函数中,当我调试断点时,断点没有按预期工作。

入口点在这里,在

main.cpp
:

int main()
{
    Teragon::WindowResizeEvent e(1280, 1024);
    std::cout << e << std::endl;
    std::cin.get();
    return 0;
}

我在

main()
的第一行有一个断点,它被击中了。我可以成功地进入下一行并确认我的“WindowResizeEvent”对象已正确构造。然后我进入 << operator overload (to send the event to the output stream).

的方法

这个方法在一个C++20模块接口分区(

EventDispatcher.cppm
)中,叫做
Teragon.Events:EventDispatcher

export std::ostream& operator<<(std::ostream& os, const Teragon::Event& e)
{
    return os << e.ToString();
}

此方法中的断点被击中并按预期正常工作。但是,如果我随后进入

e.ToString()
方法(这是对基
Event
类中方法的重写,我就会遇到问题。基类方法定义如下:

virtual std::string ToString() const { return GetName(); }

同一个

WindowResizeEvent
模块的
ApplicationEvents
分区中的
Teragon.Events
类重写这个方法是这样的:

virtual std::string ToString() const override
{
   std::stringstream ss;
   ss << "WindowResizeEvent: " << m_Width << ", " << m_Height;
   return ss.str();
}

如果我在这个覆盖的第一行有一个断点,调试器永远不会命中它。

stringstream
构造函数永远不会执行,Visual Studio 告诉我不会命中断点:

知道为什么吗?

解决方案编译,但有时我会收到此警告:

如果我重新编译,警告通常会消失,此时我没有任何错误、警告或消息。

这是我确认的内容:

  • 设置为调试配置。一般来说,断点会被击中——只是不是在这种方法中。
  • 转到“调试”>“Windows”>“模块”工具,我看到“已加载符号”。模块所在且代码正在执行的可执行文件的状态。

这是我在项目属性中的 C/C++ 选项:

和我在同一项目中的链接器选项:

c++ module breakpoints
© www.soinside.com 2019 - 2024. All rights reserved.