有什么好处以及为什么gdb与MethodName和MethodName :: <static var =“”> </static>不同

时间:2012-12-07 13:05:16

标签: c++ debugging gdb

那个让我感到惊讶的是,当为断点自动完成时,对同一个方法出现了两个选项。

test::TestFoo::SendFoo(short)
test::TestFoo::SendFoo(short)::fooID

关于cpp:

bool TestFoo::SendFoo( short x )
{
   ...
   static unsigned int fooID = 0;

为什么gdb不同?使用这一个或另一个有什么好处?

标记为C ++的问题,以避免来自C static的任何误解。

gdb --version
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-56.el6)
...

1 个答案:

答案 0 :(得分:2)

SendFoo::fooIDSendFoo是两种不同的符号,我可以想象gdb为您提供的两个断点会有所不同 - 虽然我对它不是很熟悉:

定义/初始化fooID的行将仅在整个程序中被命中一次,因此该行中的断点也应仅被命中一次。每次调用函数时都应该触发函数级断点,因此存在很大的差异。

AFAIK函数作用域static对C和C ++都是一样的 - 一个在该函数的所有调用之间共享的变量,并在第一次调用该函数时初始化。