我需要检查一些特定对象的析构函数是从哪里调用的。 让我们说它是在0x9b993e4的std :: string。 我试着执行以下内容:
b std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string if (this==0x9b993e4)
但是GDB说&#34;没有符号&#34;这&#34;在当前的背景下。&#34; 我也试过
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
有谁能告诉我如何打破特定对象的析构函数?
提前致谢!
答案 0 :(得分:1)
我找不到比使用寄存器更好的方法。 因此,在x86上,您可以检查ARM上的EAX,可能是R0。
b ClassName::~ClassName if ($eax==<object_address>)
在我的情况下,此解决方案不适用于某些全局静态对象。
答案 1 :(得分:0)
break std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()