总体介绍
webbench是一个被很多人推荐过的toy项目,是一个简单的网络压测工具。当然对我来说……菜了菜了。
首先源码直接去GitHub或者网站上下载即可。(这个网站就是极佳的测试对象???)
然后就是就是Linux环境,编译运行,源码阅读,调试…


Linux环境配置

Linux环境就需要一个Linux系统或者Linux虚拟机了,但是这两种方法占用资源比较多,而且在不同系统间切换很不方便。WSL2(适用于Linux的Windows子系统)应该能够满足我们的需求。所以我先在windows系统上配置了Ubuntu子系统, 然后可以使用vscode远程开发的方法在我们的子系统上运行webbench。(如果嫌麻烦可以直接用Linux系统或者虚拟机)

WSL2的安装我写过了,可能讲的不够清楚,但是文末的参考文档还是靠谱的。

默认配置完WSL2子系统,然后打开vscode,可以远程连接我们安装的ubuntu18.04.

编译运行

连接上去之后,当前的vscode就能够实现Linux远程开发了。和一般的远程开发的区别就是我们的远程主机装在了自己电脑上而已。然后可以在vscode打开ubuntu系统的终端。可以创建文件,下在webbench代码。

可以看到,webbench代码已经被clone到子系统上。在Linux上安装必要的编译组件,直接make.然后就可以使用webbench了。

编译成功,这个小警告可以忽视。ls一下,可以发现当前文件夹有个webbench,这就是可执行文件。

下一步就是输入指令执行。

可以看到对应的测量结果。


源码解析

主要有以下3个文件,socket.c/webbench.c/Makefile。实现简单的编译运行,这3个文件就是全部涉及到的,至于里面的webbench.1 debain LICENSE应该是与这个程序的安装有关。我还没有了解。但是源码,编译和调试是只需要上述三个文件的。

简化编译流程

第一个文件是Makefile。如下图。

Makefile我是不可能会写的。最多只会打一个make。简单的make其实用不到这么多内容。install、tar和ctags可以暂时不予考虑。可以简化我们的Makefile:

CFLAGS?=	-Wall -ggdb -W -O
CC?=		gcc
LIBS?=
LDFLAGS?=
all:   webbench

webbench: webbench.o Makefile
	$(CC) $(CFLAGS) $(LDFLAGS) -o webbench webbench.o $(LIBS) 

clean:
	-rm -f *.o webbench *~ core *.core tags
	
webbench.o:	webbench.c socket.c Makefile

.PHONY: clean 

make等价于make all。上述文件我们可以使用两条指令来编译项目。

make #编译
make clean #移除编译结果

用cmake进行编译调试

Makefile简化后还是能够正常编译执行的。不过我习惯于使用cmake。下面用cmake来替换make。

首先需要在子系统上面安装cmake.

sudo apt install cmake

然后在vscode插件商店安装正常使用cmake需要的插件(如下),注意是给wsl子系统安装。

webbench目录下创建CMakeList.txt。内容如下:

cmake_minimum_required(VERSION 3.0.0) #设置cmake最低版本要求
project(webbench VERSION 0.1.0) #设置生成项目名称及版本

#添加库目录
include_directories("/usr/include")

#设置编译指令
set(CMAKE_C_FLAGS "-Wall -ggdb3 -W -O")

#生成结果为可执行文件webbench
add_executable(webbench webbench.c)

比Makefile好理解一些。然后就可以调试运行了。之后就是vscode+cmake的使用,自己找博客。

调试程序

还有一个就是调试程序,最下方的调试按钮是quick debug,而我们是需要给webbench输入长指令和目标网址的。

./webbench -c 100 -t 10 http://home.tiscali.cz/\~cz210552/webbench

按quick debug相当于执行./webbench。所以需要配置.vscode下的launch.json:

{
   
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
   
            "name": "(cppdbg) Cmake Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${command:cmake.launchTargetPath}",
            "args": [
                "-c",
                "100",
                "-t",
                "10",
                "http://home.tiscali.cz/~cz210552/webbench"
                //"http://www.baidu.com/"
            ],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb"
        }
    ]
}

比较一下launch.json和指令就可以知道其中的联系。配置完成后就可以设置断点进行调试。

环境,编译,调试都实现了,然后就是源码的阅读。