linux服务端c++开发工具介绍(vscode版)

本文适合于有一定c++开发经验,但是还不明确如何到linux服务端开发程序的同学。

一、vscode

几年前用的是ssh到云服务上,再用vim在云上开发的形式

bash 复制代码
ssh dongbeijing.dbj@11.158.142.176
vim hello.c

现今,由于vscode比较好用,这几年换了vscode内部配置ssh到云服务上开发,插件名称是++Remote SSH++。

输入密码,选择目录打开后,确认正常后,可以保存为workspace,方便重复使用 。

二、shell工具

ssh免密登陆

云服务:

bash 复制代码
ssh-keygen -t rsa

# 文件名 auth
Enter file in which to save the key: auth

cat ~/.ssh/auth.pub >> ~/.ssh/authorized_keys
chmod 644 ~/.ssh/authorized_keys

本地开发机器:

bash 复制代码
scp dongbeijing.dbj@11.158.142.176:~/.ssh/auth ~/.ssh

vscode指定ssh配置路径为~/.ssh/config

config文件为

bash 复制代码
Host 11.158.142.176
HostName 11.158.142.176
User dongbeijing.dbj
IdentityFile ~/.ssh/auth

文件拷贝

切换root账号

bash 复制代码
sudo bash -c bash

查看文件大小

bash 复制代码
du -sh /tmp/test.pcap

scp复制

bash 复制代码
# 本地机器执行
scp dongbeijing.dbj@11.114.12.212:/tmp/test.pcap ./

或者用osscmd上传到云上oss存储。

bash 复制代码
osscmd put test.pcap oss://myworkspac/network/pcap

或者用sz工具直接复制

bash 复制代码
sz test.pcap

线上抓包

保存文件,用wireshark看

bash 复制代码
tcpdump -i eth0 host 111.63.213.231 and port 31586 -w /tmp/test.pcap

用enn和vvv,线上直接看

bash 复制代码
tcpdump -i bond0.715 udp port 1106 and host 44.123.42.3 -enn -vvv

弱网模拟

ip不通

bash 复制代码
# 添加
sudo iptables -A INPUT -s 127.0.0.1 -p udp -d 127.0.0.1 --sport 33698 -j DROP

# 删除
sudo iptables -D INPUT -s 127.0.0.1 -p udp -d 127.0.0.1 --sport 33698 -j DROP

# 查询
sudo iptables -L -n -v

丢包延迟

bash 复制代码
## === 添加
sudo tc qdisc add dev lo root handle 1:prio

# 延迟300ms 丢包15%
sudo tc qdisc add dev lo parent 1:3 handle 30:netem loss 15% delay 300ms

# 生效
sudo tc filter add dev lo protocol ip parent 1:0 u32 match ip sport 33698 0xffff flowid 1:3


## === 删除
sudo tc qdisc del dev lo root

## === 查看
sudo tc qdisc show dev lo
sudo tc fliter show dev lo

网络请求

curl模拟http请求

bash 复制代码
curl -v 'http://myhello.com' -o /dev/null -x 127.0.0.1:10080

模拟100次curl的方法

bash 复制代码
for((i=1; i<=100; i++)); do curl -s "www.helloworld.com"; done

tsar查看cpu状态

bash 复制代码
tsar --cpu --percpu -i1 -n1 | less |grep 19:30

dmseg查看启动信息

bash 复制代码
dmesg -T # 启动信息
cat /var/log/mcelog # 硬件信息
tsar --cpu -I percpu -i1 -n1 # n1表示只输出1次

查看网络信息

bash 复制代码
ifconfig
ip route # 如果显示bond,那么是逻辑网卡
ping 127.0.0.1
ethtool -k eth0 # 网卡硬件加速
ip route | grep lock

三、版本管理

git代码

我使用的GitLens,方便可视化可blame信息,当然在vs code的扩展商店里,搜Git也有其他工具。

rpm版本

bash 复制代码
rpm -qa|grep helloworld

四、gdb

vscode插件

插件名称是Remote Development,需要配置launch.json,指定远程启动目录。

云服务端需要配置gdbserver,其中2333是vscode的默认gdb链接端口。

bash 复制代码
sudo localhost:2333 hello.out -c config.txt

gcore进程

gcore单个进程,产生core dump,用gdb可以看到各个变量的情况。

gdb函数

参考示例

bash 复制代码
define print_connections
    set $i=0
    while $i<1000
        set $c=ngx_cycle.connections[$i]
        if $c.fd > 0
            if $c.read.handler==ngx_rtmp_recv
                set $s=(ngx_rtmp_session_t*)$c.data
                p $i
                p $s.params
            end
        end
        set $i=$i+1
    end
end
    

pstack

查看进程的堆栈情况,如何进程一直卡在相同的堆栈里,那么大概率是死循环了。

bash 复制代码
pstack 1234 #进程号是1234

套接字

查看进程的套接字创建是否正常

bash 复制代码
ss -alp|grep 1234 # 进程号 1234

五、vim和tail

主要会i、a、GG和ctrl+d/u等,满足看日志需求

动态看日志的方法

bash 复制代码
tail -f error.log | grep "hello world, times:"
相关推荐
无小道2 分钟前
深入解析操作系统文件缓冲区:页缓存、基数树与f_pos的协同设计
linux·缓存·文件缓冲区
Python私教23 分钟前
Blender模型导入Godot完整教程:GLB、BLEND与继承场景怎么选
运维·godot·blender
其实防守也摸鱼26 分钟前
GitHub开源项目破圈方法论:从技术自嗨到生态共赢
服务器·数据库·学习·开源·github·命令行·linux系统
爱写代码的森1 小时前
鸿蒙三方库 | harmony-utils之PasteboardUtil剪贴板数据读写详解
服务器·华为·harmonyos·鸿蒙·huawei
寒水馨1 小时前
Linux下载、安装godot-4.7.1-stable(附安装包Godot_v4.7.1-stable_linux.x86_64.zip)
linux·游戏引擎·godot·游戏开发·2d游戏·3d游戏·godot engine
念恒123061 小时前
Socket编程UDP(中)
linux·网络协议·udp
深耕运维十八载云架构实务1 小时前
系统故障玄学之内存明明显示空闲,服务器却频繁卡顿卡死?拆解被忽略的 Linux 隐性内存陷阱
linux
qetfw2 小时前
CentOS 7 搭建 Sendmail + Dovecot 邮件服务器:SMTP、POP3、IMAP 与 TLS
linux·centos
xlq223222 小时前
高并发服务器day5
java·服务器·数据库
明日清晨2 小时前
printf(“%p\n“,&((struct A *)NULL)->m_float)的原理
linux·服务器·前端