【C++】linux下的gdb程序调试

目录

  • 【C++】Linux 下的 GDB 程序调试
    • 1. 安装 GDB
    • 2. 编译程序
    • 3. 启动 GDB
    • 4. 设置断点
    • 5. 执行程序
    • 6. 调试命令
    • 7. 调试崩溃
    • 8. 结束调试

【C++】Linux 下的 GDB 程序调试

在开发 C++ 程序时,出现 bug 是常见的。调试是找出程序错误的关键步骤之一。在 Linux 环境下,我们可以使用 GDB (GNU Debugger) 工具来帮助我们进行程序调试。本文将介绍如何在 Linux 下使用 GDB 进行 C++ 程序调试的基本步骤和常用命令。

1. 安装 GDB

首先,我们需要在 Linux 系统上安装 GDB。在大多数发行版的软件仓库中都可以找到 GDB。在 Ubuntu 上,可以使用以下命令进行安装:

sudo apt-get install gdb

2. 编译程序

在进行调试之前,我们需要先用调试符号编译你的 C++ 程序。在编译时,使用 -g 参数来生成调试符号信息。例如,假设你的程序文件名为 “program.cpp” ,可以使用以下命令进行编译:

g++ -g program.cpp -o program

这里如果使用的是cmake:

cmake .. -DCMAKE_BUILD_TYPE=Debug

3. 启动 GDB

通过在终端中输入 gdb 命令即可启动 GDB 调试器,并加载你的程序。例如,假设你的可执行文件名为 “program” ,可以在命令行中输入:

gdb program

4. 设置断点

断点是 GDB 中调试过程中常用的工具之一。通过设置断点,我们可以在程序执行到特定位置时停下来,以便查看程序状态。在 GDB 命令提示符下,可以使用 breakb 命令来设置断点。

  • 在特定行上设置断点:

    break line_number
    

    例如,要在第 10 行设置断点,可以输入:

    break 10
    
  • 在特定函数中设置断点:

    break function_name
    

    例如,要在名为 “myFunction” 的函数中设置断点,可以输入:

    break myFunction
    

5. 执行程序

调试器已经加载程序并设置好断点,可以通过 runr 命令来执行程序。

run

执行后,程序将开始运行,直到遇到第一个断点或程序结束。

6. 调试命令

在程序执行过程中,可以使用以下命令来进行调试:

  • nextn:单步执行程序,将执行到下一行,但不会进入函数。
  • steps:单步执行程序,将执行到下一行,并进入函数。
  • continuec:继续执行程序,直到遇到下一个断点或程序结束。
  • printp:打印变量的值。例如,p variable_name
  • backtracebt:显示当前调用栈。
  • quitq:退出 GDB 调试器。

此外,还有其他许多 GDB 命令可用以帮助进行调试和查看程序的状态,可以使用 help 命令获取更多信息。

7. 调试崩溃

如果程序发生崩溃,GDB 可以帮助我们确定问题所在。当程序异常终止时,可以使用 backtrace 命令查看调用栈,并使用 print 命令查看相关变量的值,以了解导致崩溃的原因。如果可用,还可以使用 core 文件进行更深入的分析。

gdb program core

8. 结束调试

当调试完成后,可以使用 quit 命令退出 GDB 调试器。

以上是在 Linux 环境下使用 GDB 调试 C++ 程序的基本步骤和常用命令。掌握了这些基本技巧,可以更高效地诊断和修复程序中的错误。希望这篇博客对你在 C++ 程序调试方面有所帮助。

附:如使用vscode的界面化调试,其json为:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb)start",
            "type": "cppdbg",
            "request": "launch",
            "program": "/home/kylin/work/sophon-stream/sophon-stream/samples/arcfaceDemo/build/arcface_demo",
            "args": [],
            "stopAtEntry": false,
            "cwd": "/home/kylin/work/sophon-stream/sophon-stream/samples/arcfaceDemo/build/",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "miDebuggerPath": "/usr/bin/gdb"
        }

    ]
}

你可能感兴趣的:(c++,c++,linux,开发语言)