gdb调试
语句 | 含义 |
---|---|
gcc -g | 编译源码确保含有-g的参数 |
gdb ./app | 启动gdb并开始调试程序app |
(gdb)set args x1 y1 | 设置app运行的参数(./app x1 y1) |
(gdb) r | 开始运行程序(run的简写) |
(gdb) l | 列举调试的源码(list的简写) |
(gdb) b 16 | 在代码16行设置断点 |
(gdb)b main.cpp:12 | 在main.cpp文件的12行设置断点 |
(gdb)b onRecv | 在onRecv函数设置断点 |
(gdb)info break | 查看所有的断点 |
(gdb)info break 3 | 查看第3个断点 |
(gdb)n | 单行执行,有函数不会进入函数(next简写) |
(gdb)s | 单步执行,有函数会跳入函数(step简写) |
(gdb)finish | 退出函数 |
(gdb)c | 继续运行(continue简写) |
(gdb)q | 退出调试(quit简写) |
(gdb)p a | int a = add(1,2); |
如果在上述代码附近设置断点后,查看a的值(print的简写)
tcpdump
- tcpdump -n -i eth0 host 192.168.31.147 and 114.114.114.114
截取本机192.168.31.147和主机114.114.114.114之间的通信数据 - tcpdump -n -i eth0 dst 192.168.31.147
- tcpdump -n -i eth0 dst 192.168.31.147 or 192.168.31.157
截取所有进入本机的数据(或多个IP) - tcpdump -n -i eth0 dst 192.168.31.147 or 192.168.31.157 and tcp
抓取进入本机的所有tcp数据包 - tcpdump -n -i eth0 src 192.168.31.147 or 192.168.31.157
- tcpdump -n -i eth0 src 192.168.31.147 and port ! 22 and tcp
抓取从本机发出的数据包(and or进行条件筛选端口) - tcpdump host 192.168.1.142
截获主机所有的收发的数据
strace
- strace –o log.txt app
执行app程序,并将其涉及的所有系统调用输出到log.txt中 - strace –o log.txt –p pid
查看指定进程号的程序对应的系统调用的过程
valgrind
- 安装valgrind
Yum install valgrind - 生成内存泄露信息
valgrind –tool=memcheck –leak-check=yes –log-file=mem.txt ./app - definitely lost
肯定泄露部分 - possibly lost
可能泄露部分 - indirectly lost
间接泄露