一、gdb调试
- gcc test.c –g –o test
- gdb –q test (Attaching到某个进程)
- start(从main开始运行)
- breakpoints 8
- list 1,100(还可以用来显示附近的代码,比如l 200,显示200行附近的代码)
- run
- delete
- disable 1
- enable 1
- clear 7
- continue c
- backtrace bt
- info breakpoint
- step s
- next (n 数字 表示执行n多少次 慎用j n)
- f查看栈帧
- where 显示导致段错误的执行函数处。
- print (p) 打印变量
- dir 指定文件路径
- b 文件名:行号(不需要添加文件名路径)
- 按tab卡住后,按ctrl+c恢复
- until 325 执行到325行
参考资料:
https://www.cnblogs.com/tangtangde12580/p/8045980.html
https://www.cnblogs.com/kingos/p/4514756.html
二、asan调试
1. 编译加上-g与-fsanitize=address g++ -O -g -fsanitize=address 源文件
2. ./a.out运行后就会输出可读性比较好的错误信息
3. 把错误转换为错误信息,并输出到check文件中
cat 错误日志 | asan_symbolize.py |c++filt > ./check
参考资料:
https://en.wikipedia.org/wiki/AddressSanitizer
https://github.com/google/sanitizers/wiki/AddressSanitizer
https://blog.csdn.net/c_lazy/article/details/80009627
三、日志
四、addr2line
1. addr2line –e 可执行文件 地址(dmsg和strace)
https://blog.csdn.net/ma2595162349/article/details/88540946
五、core文件
1 gdb调试需要符号表
2 release版本符号表会被单独分离出来(objcopy)
3 gdb -s ×××.symbol –e 进程文件 -c core文件
4 gdb --symbols=×××.symbol --core=core文件
5 bt查看栈帧
https://blog.csdn.net/wkd_007/article/details/79757289 core设置
https://blog.csdn.net/u014162133/article/details/81381913 使用symbol调试core
https://blog.csdn.net/zkuili/article/details/81260021
https://www.cnblogs.com/lit10050528/p/4811833.html