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