GDB 调试C++

    原来比较熟悉用gdb调试C程序,没有用过gdb调试C++程序,原理上没有什么区别。在形式上有一些区别,因为C++支持名字空间和class等机制,把函数的可见域做了隔离。

拿envoy的代码作个例子:

代码片段如下:

 1 namespace Envoy {
 2 namespace Upstream {
 3 
 4 RingHashLoadBalancerStats RingHashLoadBalancer::generateStats(Stats::Scope& scope) {
 5   return {ALL_RING_HASH_LOAD_BALANCER_STATS(POOL_GAUGE(scope))};
 6 }
 7 
 8 HostConstSharedPtr RingHashLoadBalancer::Ring::chooseHost(uint64_t h) const {
 9   if (ring_.empty()) {
10     return nullptr;
11   }
12 ......
13 }
}
}

一、设置断点

比如:对于chooseHost函数,设置断点,需要加上namespace::class作为前缀

(gdb) b Envoy::Upstream::RingHashLoadBalancer::Ring::chooseHost
Breakpoint 1 at 0xcd0f42: file source/common/upstream/ring_hash_lb.cc, line 44.(行号仅做参考)

猜你喜欢

转载自www.cnblogs.com/freedh/p/12006280.html