gpt4 book ai didi

c++ - 在未调用的函数中触发断点

转载 作者:太空宇宙 更新时间:2023-11-04 13:29:32 27 4
gpt4 key购买 nike

这很奇怪。我在一个有断点的类上有一个函数,即使函数的其余部分没有运行,它也会被击中。重现此代码所需的代码量可能不切实际,但这是我所看到的:

我的类.h:

enum OptionsEnum { OPTION_1, OPTION_2 };

struct OptionsStruct
{
OptionsEnum options;
int value;
};

class MyClass
{
private:
Initialize(...);
Process(const OptionsStruct&);

OptionsStruct m_Options { };
}

我的类.cpp:

#include "MyClass.h"

void MyClass::Initialize(...)
{
...do some stuff with local variables... //<--Breakpoint here not triggered
...do some more stuff...

Process(m_Options); //<--Breakpoint here is triggered! How?!

...do yet more stuff... //<--Breakpoint here not triggered
}

void MyClass::Process(const OptionsStruct& options)
{
...do some other stuff... //<--Breakpoint here not triggered
}

我见过很多帖子都有相反的问题,他们期望被击中的断点被优化掉了,因此从未触发过,但我想不出反过来的可能性:优化导致在函数中间命中的断点,该函数最初从未被调用过。

单步执行代码表明它从未真正进入 Initialize() 函数,但是当使用断点运行时,它会触发它。可以肯定的是,我什至关闭了优化并让它运行,它仍然会遇到那个断点。只有那个断点。我在函数的每一行代码上都设置了一个断点,只有那一行代码命中。 Process() 中的断点也不会触发,即使它是由触发的行调用的。

模式似乎是只有其中包含成员变量的行才会被命中。当它们这样做时,如果您将鼠标悬停在 m_Options 上,结构中的所有字段都是垃圾(未初始化的)值。

调用堆栈没有帮助 - 它只是指向 [External Code] 和下面的 [Frames below may be incorrect and/or missing...] 函数是私有(private)的,所以我不知道外部代码怎么可能调用它。这是调试器中的错误吗?某种优化魔法?什么可能导致这样的事情发生?

最佳答案

内存损坏可能会导致此问题。也许在您的代码中某处有一个损坏的指针,这可能是使用它的副作用。它可以部分解释为什么您无法访问调用堆栈。只是为了确定......断点是否与您运行的源代码完全相同?即使代码与编译版本不同,也可以进行调试。这会使断点变得无用。

关于c++ - 在未调用的函数中触发断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32078686/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com