GDB中针对特定对象的断点

时间:2015-11-06 09:04:47

标签: c++ gdb this breakpoints

我需要检查一些特定对象的析构函数是从哪里调用的。 让我们说它是在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

有谁能告诉我如何打破特定对象的析构函数?

提前致谢!

2 个答案:

答案 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()