从抓到的包上我们可以清楚的看到tcp连接建立的三次握手到数据传输到tcp连接断开四次挥手的过程(前三个数据包是三次握手的过程,最后四个数据包是四次挥手的过程,中间的为数据传输所产生的网络数据包)。
3 内存
3.1 valgrind
valgrind 是在Linux程序中广泛使用的调试应用程序。它尤其擅长发现内存管理的问题,可以检查程序运行时的内存泄漏问题等。我们在使用valgrind时也主要用到它的内存泄漏检测功能,即memcheck功能。它检查所有对内存的读/写操作,并截取所有的malloc/new/free/delete调用。因此memcheck工具能够探测到以下问题:
(1)使用未初始化的内存
(2)读/写已经被释放的内存
(3)读/写内存越界
(4)读/写不恰当的内存栈空间
(5)内存泄漏
(6)使用malloc/new/new[]和free/delete/delete[]不匹配。
(7)src和dst的重叠valgrind的可选的参数以及对应的含义如下所示:
(1)-version 显示valgrind内核的版本,每个工具都有各自的版本。
(2)q –quiet 安静地运行,只打印错误信。
(3)v –verbose 更详细的信息, 增加错误数统计。
(4)-trace-children=no|yes 跟踪子线程
(5)-track-fds=no|yes 跟踪打开的文件描述
(6)-time-stamp=no|yes 增加时间戳到LOG信息
(7)-log-fd=
输出LOG到描述符文
(8)-log-file=
将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
(9)-log-file-exactly=
输出LOG信息到 file
(10)-log-file-qualifier=
取得环境变量的值来做为输出信息的文件名。
(11)-log-socket=ipaddr:port 输出LOG到socket ,ipaddr:port
LOG信息输出:
(1)-xml=yes 将信息以xml格式输出,只有memcheck可用
(2)
-num-callers=
show
callers in stack traces [12]
(3)-error-limit=no|yes 如果太多错误,则停止显示新错误? [yes]
(4)-error-exitcode=
如果发现错误则返回错误代码 [0=disable]
(5)-db-attach=no|yes 当出现错误,valgrind会自动启动调试器gdb。[no]
(6)-db-command=
启动调试器的命令行选项[gdb -nw %f %p]适用于Memcheck工具的相关选项:
(1)--leak-check=no|summary|full 要求对leak给出详细信息? [summary]
(2)--leak-resolution=low|med|high how much bt merging in leak check [low]
(3)--show-reachable=no|yes show reachable blocks in leak check? [no]
示例:valgrind --leak-check=full /usr/local/app/taf/tafnode/data/TenFortune.WeChatProxySvr/bin/WeChatProxySvr --config=/usr/local/app/taf/tafnode/data/TenFortune.WeChatProxySvr/conf/TenFortune.WeChatProxySvr.config.conf -trace-child=yes。执行的结果: