c++开发调试,问题排查工具

gdb

gdb常用调试命令以及多线程堆栈的查看
使用编译器(cc/gcc/g++)的 -g 参数。如:
> cc -g hello.c -o hello
> g++ -g hello.cpp -o hello
gdb +程序名 运行(gdb main)
使用 “–tui” 参数,可以在终端窗口上部显示一个源代码查看窗。
gdb --tui main

list(l) 查看最近10行源码
list fun 查看fun函数源码
list file:fun 查看file文件中的fun函数源码
list num1 num2 查看num1~num2行的源码

break 行号
break fun 在函数处设置断点
break file:行号
break file:fun
break if 条件成立时程序停住
info break (i b)查看断点
watch expr 当expr的值发生改变时,程序停住
delete n 删除断点

run/r 启动程序
continue© 运行至下一个断点
step(s) 单步跟踪,进入函数
next(n) 单步跟踪,不进入函数
finish 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数信息
until 运行程序直到程序退出循环体
print i (p i) 查看变量的值
ptype 查看变量类型
print array 查看数组
print *array@len 查看动态内存
print x=5 改变运行时的数据
print &array 查看数组的地址
回车代表上一个命令

core文件
在程序崩溃时,一般会生成一个文件叫core文件。core文件记录的是程序崩溃时的内存映像,并加入调试信息。core文件生成的过程叫做core dump
设置生成core文件
ulimit -c 查看core-dump状态
ulimit -c 数字
ulimit -c unlimited
gdb利用core文件调试
gdb 文件名 core文件
Backtrace(bt) 查看堆栈b

多线程调试
info threads 显示当前可调试的所有线程
thread ID 切换当前调试的线程为指定ID的线程
attach process-id 在gdb状态下,开始调试一个正在运行的进程
thread apply all command 所有线程执行command
set scheduler-locking off/on/step,锁定线程执行。

可以设置
breakpoint(可加条件语句)
watchpoint(断点后可以观察到值的变化,可设置线程id)
catchpoint(异常事件的地方断点)
checkpoint (可以生成快照后分析快照而不用在线分析),tracepoint(跟踪变量的值但是不断点)

pstack pid 查看当前进程所有线程的堆栈

gcore core.2020生成core文件

buff/cache过高
sync
echo 3 > /proc/sys/vm/drop_caches

binutils

nm

查看(对象文件、可执行文件或对象文件库)符号表

objdump

显示目标文件中的信息,可做反汇编

readelf

读ELF文件信息

hexdump

以十六进制或ASCII码显示一个文件

c++filt

查看重载的真实函数名

addr2line

地址转换函数文件和行的工具

ld

gprof

仍然需要编译进代码才能使用,有侵入性。(线上需要分析性能如果频率不高可以考虑使用pstack+pmap)
原理:
使用汇编语言嵌入mcount统计每一个函数的调用次数,调用关系和时长。
缺点:
不适合多线程,不适合线上分析。
代替工具:
gperftools,oprofile定时周期信号中断采样。
SystemTap :火焰图工具,可以通过utrace/uprobe模块扩展用户空间进程的分析能力。

其他

1 查看硬盘大小
fdisk -l | grep Disk

2 查看内存总数

#cat /proc/meminfo | grep MemTotal
MemTotal: 32941268 kB //内存32G

3 查看CPU个数

cat /proc/cpuinfo | grep “physical id” | uniq | wc -l

uniq命令:删除重复行;wc –l命令:统计行数

4c查看CPU核数

cat /proc/cpuinfo | grep “cpu cores” | uniq

5 查看CPU型号

cat /proc/cpuinfo | grep ‘model name’ |uniq
model name : Intel® Xeon® CPU E5630 @ 2.53GHz

查询系统CPU是否启用超线程:cat /proc/cpuinfo | grep -e “cpu cores” -e “siblings” | sort | uniq

sar -n DEV 1 100 # 查看网卡流量,每秒输出一次,输出100次。
nethogs -a -s

内存泄漏检测工具valgrind 的memcheck(内存泄漏)Cachegrind(cache命中丢失)Callgrind(函数调用)Helgrind(多线程竞争)Massif(堆栈分析器)

linux 调试利器gdb, strace, pstack, pstree, lsof

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值