gpt4 book ai didi

c++ - 我可以在基类方法中设置一个条件断点,仅当它是特定派生类的实例时才会触发?

转载 作者:IT老高 更新时间:2023-10-28 23:01:36 32 4
gpt4 key购买 nike

假设我有一些基类 A 和两个派生类 B 和 C。A 类有一些称为 f() 的方法。

有没有办法在 Visual Studio 的 A::f() 中设置条件断点,只有当我的“this”实际上是 C 类的实例时才会触发?

例如


void A::f()
{
some code and a breakpoint
}

void foo(A* a)
{
a->f();
}

void bar()
{
A a;
B b;
C c;
foo(&a); // breakpoint isn't hit
foo(&b); // breakpoint isn't hit
foo(&c); // breakpoint is hit
}

我已经设法通过在断点条件下测试虚拟表指针来实现它,但必须有更好(更简单)的方法。

提前致谢。

编辑:按照评论中的建议修改源代码并不是我正在寻找的解决方案。只能通过 VC++ 调试器来完成。

最佳答案

你可以。首先,确定要检查的类型的虚拟表的地址。然后设置一个断点,条件如下 (arg).__vfptr != 0x01188298其中 0x01188298 是您的类型 vtable 的地址。就是这样。

关于c++ - 我可以在基类方法中设置一个条件断点,仅当它是特定派生类的实例时才会触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6612515/

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