GDB 中特定对象的断点

Breakpoint in GDB for specific object

我需要检查某个特定对象的析构函数是从哪里调用的。 假设它是 0x9b993e4 处的 std::string。 我尝试执行以下操作:

b std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string if (this==0x9b993e4)

但是 GDB 在当前上下文中说 "No symbol "this"。" 我也试过了

b std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string if (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::this==0x9b993e4)

GDB 看起来像是设置了断点,但是当我 运行 时,它停止并写入

Error in testing breakpoint condition:
There is no field named this

谁能告诉我如何中断特定对象的析构函数?

提前致谢!

break std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()

我找不到比使用寄存器更好的方法了。 所以,在 x86 上你可以检查 EAX,在 ARM 上,可能是 R0。

b ClassName::~ClassName if ($eax==<object_address>)

在我的案例中,此解决方案不适用于某些全局静态对象。