VMwear安装Ubuntu 22.xx LTS
Ubuntu Server 22.04.3 Download
20与22安装步骤基本差不多,开始有些页面不一样,按顺序往下走就行。
对Ubuntu进行一些配置
#1修改root密码
sudo passwd root
#2设置远程可登录root
su
vim /etc/ssh/sshd_config
Port 22
PermitRootLogin yes # 允许root直接登录
PermitEmptyPasswords no
# 3重启服务
systemctl restart ssh
# 4关闭防火墙,减少后面开端口不必要的麻烦
ufw disable
# 5安装net-tools查看ip。(或者使用ip addr show)
apt-get update
apt-get install net-tools
ifconfig
# 6重启Ubuntu
reboot
安装需要的软件
sudo apt install build-essential gdb gdbserver cmake
echo 0 | tee /proc/sys/kernel/yama/ptrace_scope
sudo apt install libpcre3 libpcre3-dev libgeoip-dev zlib1g-dev libxslt1-dev libssl-dev
创建普通C语言工程,配置Clion里面Toolchains并测试
创建纯C工程就按照正常步骤。
配置Toolchains
settings > Toolchains > add Remote Host
配置Credentials(主机配置使用root登录,或者使用密钥)后其它自动识别
下载Nginx原码
cd /home
mkdir code && cd code && mkdir nginx
weget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz && cd nginx-1.24.0
./configure --prefix=/home/code/nginx/NginxExe --with-debug --with-cc-opt=-'O0'
配置Clion的部署目录并拉取代码
setting > Deployment > Mappings > (Deployment path: /home/code/nginx-1.24.0)
Deployment > Download from xxx
点击Makefile文件,并点击文件上方Load Makefile Project
取消Load Project弹框的Clean project
setting > Makefile > (Commands: ./configure --prefix=/home/code/nginx/NginxExe --with-debug --with-cc-opt=-'O0')
删除(Build target: all)
刷新并重新构建看可有问题
配置调试
Clion里面nginx代码做点日志重新构建,并重新生成可执行文件到NginxExe
//在src/event/ngx_events.c里的
void ngx_process_events_and_timers(ngx_cycle_t *cycle);
//添加日志,并加入断点
ngx_log_debug(NGX_LOG_DEBUG_EVENT,cycle->log,0,"HELLO NGINX CODE !");
//在重新build and insert(选择完点🔨)
修改nginx可执行文件的配置并启动
# 修改nginx配置
vim /home/code/nginx/NginxExe/conf/nginx.conf
error_log logs/error.log debug; #日志输出级别,其它的配置也可以设置
# 启动nginx
/home/code/nginx/NginxExe/sbin/nginx
启动gdbserver
# 查看nginx的PID 带有worker的第一个
ps -ef | grep nginx
gdbserver --attach :5555 PID of nginx
tail -f /home/code/nginx/NginxExe/logs/error.log
再配置Clion里面的Remote Debug
run > Edit Configurations > add Remote Debug
(Debugger: 选择之前配置的toolschains)
(target remote args: 服务器IP:5555)
点击Debug
调用nginx服务进入断点
# 浏览器访问服务器IP,或者
curl http://localhost