当前位置:网站首页 >  百科

从零手把手教你在Linux服务器上做C/C++项目源码调试全实操

时间:2026年06月03日 09:59:19 来源:易频IT社区

前置环境准备

以下操作基于通用Linux服务器环境,覆盖服务器开发最常用的C/C++项目调试,所有工具直接通过包管理器安装,无需额外下载。

安装核心依赖工具

根据你的服务器发行版执行对应命令:

Debian/Ubuntu系执行:

``` sudo apt update && sudo apt install -y gdb gcc g++ make ```

CentOS/RHEL系执行:

``` sudo yum update && sudo yum install -y gdb gcc gcc-c++ make ```

编译项目生成调试符号

核心必做:必须在编译时添加-g参数生成调试符号,关闭编译优化,否则无法匹配源码行号,无法正常调试。

以下是可直接复制修改的完整Makefile示例:

``` CC=gcc CXX=g++ 强制添加调试符号、关闭优化 CFLAGS=-g -O0 CXXFLAGS=-g -O0 TARGET=你的可执行文件名 all: $(TARGET) 单文件编译示例,替换为你自己的编译规则即可 demo: main.o $(CXX) $(CXXFLAGS) main.o -o demo main.o: main.cpp $(CXX) $(CXXFLAGS) -c main.cpp clean: rm -f .o $(TARGET) ```

以下是测试用的示例源码main.cpp,可用来验证调试流程:

``` include int add(int a, int b) { return a + b; } int main() { int x = 2; int y = 3; int res = add(x, y); std::cout << res << std::endl; return 0; } ```

从零手把手教你在Linux服务器上做C/C++项目源码调试全实操

执行make命令即可生成带调试信息的可执行文件。

核心实操步骤

服务器调试分两种核心场景,分别说明操作:

场景1:调试新启动的服务程序

  • 启动GDB加载程序:执行命令 ``` gdb ./你的可执行文件名 ```
  • 设置断点:输入b 行号/函数名,例如:b 6表示在第6行设置断点,b add表示在add函数入口设置断点,bbreak的缩写,可以直接使用。
  • 启动运行:输入r(全称run),程序会开始运行,遇到断点自动停下。
  • 常用操作快捷键:
    • n(next):单步跳过,执行下一行,不进入函数内部
    • s(step):单步进入,会跳进当前调用的函数内部查看执行逻辑
    • p 变量名(print):打印当前变量的值,例如输入p x会输出x的当前值
    • c(continue):继续运行,直到下一个断点
    • q(quit):退出GDB调试

场景2:调试正在运行的在线服务器进程(核心常用场景)

  • 第一步:获取目标进程PID,替换命令中的进程名即可: ``` ps aux | grep 你的服务进程名 ``` 输出结果的第二列就是PID,例如我们拿到测试PID为1234。
  • 第二步:放开权限限制,大部分Linux服务器默认禁止attach其他进程,执行命令临时放开: ``` sudo sysctl -w kernel.yama.ptrace_scope=0 ``` 调试完成后可以改回1保证系统安全。
  • 第三步:attach目标进程开始调试: ``` sudo gdb -p 你的PID ``` 必须加sudo,否则会因权限不足attach失败。
  • 第四步:attach后进程会默认断住,你设置好断点后输入c让进程继续运行,后续有请求进来就会触发断点停下,后续操作和本地调试完全一致。

常见卡壳问题解决

调试时源码行号对不上

90%的原因是编译时开启了优化,或者没有加-g参数,重新编译,确认编译参数为-g -O0即可解决。

attach提示不允许操作

两个原因:一是没有加sudo执行gdb,加上sudo即可;二是没有关闭ptrace安全限制,执行上文的sysctl命令放开即可。

VS Code可视化调试配置(可选)

如果你用VS Code远程连接服务器开发,可以直接通过可视化界面点击调试,不用手动敲命令,配置如下:

在项目根目录创建.vscode/launch.json,放入以下可直接复制的配置:

``` { "version": "0.2.0", "configurations": [ { "name": "GDB 调试服务器进程", "type": "cppdbg", "request": "attach", "program": "你的服务器可执行文件绝对路径", "processId": "${command:pickProcess}", "MIMode": "gdb", "setupCommands": [ { "description": "启用美化打印", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] } ```

替换配置里的可执行文件绝对路径后,直接点击运行调试,VS Code会自动列出所有运行中的进程,选择你要调试的进程即可直接可视化断点调试,和本地开发体验一致。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图