写点什么

调试技巧 | AI 工程化部署

作者:AIWeker
  • 2024-01-04
    福建
  • 本文字数:1365 字

    阅读完需:约 4 分钟

调试技巧:GDB

1. 什么是 GDB

当我们的程序出现问题且不知道具体的原因时,我们就需要对程序进行调试分析,这时 GDB 调试工具就会起到很大作用。


GDB 是 GNU 开源组织发布的一款强大的 Unix 下的程序调试工具,在 Linux 系统中应用非常广泛。它可以用于调试 C,C++,Objective-C 等语言编写的程序。

2. GDB 基本使用

  1. GDB 安装:在 Linux 系统中,你可以通过包管理器来安装 GDB。例如在 Ubuntu 中,你可以使用sudo apt-get install gdb来安装。

  2. GDB 基本命令

  3. gdb your_program:启动 GDB,其中your_program是你想要调试的程序名。

  4. run:运行程序。

  5. break main:在 main 函数处设置断点,也可以选择行数。

  6. break your_function:在your_function函数处设置断点。

  7. continue:继续执行程序,直到遇到下一个断点或者程序结束。

  8. step:进入函数内部调试。

  9. next:执行下一行代码,不进入函数内部。

  10. print variable_name:打印变量值。

  11. info local variables:查看当前函数的所有局部变量。

  12. quit:退出 GDB。

  13. GDB 断点调试


假设我们有一个 C 语言程序,文件名为example.c,我们想要在 main 函数的第 5 行代码处设置断点,并查看该行的变量值。


首先,我们需要使用 gcc 编译程序时加入调试信息:


gcc -g example.c -o example
复制代码


然后,我们可以使用 gdb 启动程序进行调试:


gdb example
复制代码


在 gdb 中,我们可以使用break main命令设置断点,然后使用run命令运行程序:


(gdb) break main(gdb) run
复制代码


当程序执行到 main 函数的第 5 行时,程序会停止执行,这就是所谓的“断点”。此时我们可以使用print variable_name命令查看变量的值,例如:


(gdb) print x
复制代码


其中,x是我们想要查看的变量名。如果我们要继续执行程序直到下一个断点或者程序结束,我们可以使用continue命令。如果我们想要进入函数内部调试,可以使用step命令;如果我们想要执行下一行代码而不进入函数内部,可以使用next命令。如果我们想要查看当前函数的所有局部变量,可以使用info local variables命令。最后,如果我们想要退出 gdb,可以使用quit命令。

CORE 文件

在 Linux 系统中,"core 文件"通常指的是一种调试文件,它是程序发生崩溃时由操作系统生成的文件。当一个程序崩溃时,操作系统会创建一个名为"core"的文件,通常在程序崩溃时所在的目录中生成,文件名为程序的名称加上".core"后缀。


要生成 core 文件,可以按照以下步骤进行:


  1. 确保程序在编译时加入了调试信息。在编译程序时,使用-g选项可以生成带有调试信息的可执行文件。例如,使用以下命令编译程序:


gcc -g your_program.c -o your_program
复制代码


  1. 当程序崩溃时,操作系统会自动生成一个 core 文件。你可以在程序崩溃时所在的目录中查找该文件。core 文件的命名规则是program_name.core,其中program_name是崩溃的程序名称。

  2. 使用 GDB 等调试工具打开 core 文件进行分析。你可以使用以下命令使用 GDB 打开 core 文件:


gdb your_program <core_file_path>
复制代码


其中,your_program是编译时的可执行文件名,<core_file_path>是 core 文件的路径。4. 在 GDB 中,你可以使用各种命令来查看程序的状态、变量的值、堆栈跟踪等信息。例如,你可以使用info registers命令查看寄存器的状态,使用print variable_name命令查看变量的值,使用backtrace命令查看堆栈跟踪等。


通过分析 core 文件,你可以更好地了解程序崩溃时的状态和原因,从而有助于调试和修复问题。


在 linux 系统中,core 文件是默认不打开的。可以通过


ulimit -c unlimited
复制代码


发布于: 刚刚阅读数: 5
用户头像

AIWeker

关注

InfoQ签约作者 / 公众号:人工智能微客 2019-11-21 加入

人工智能微客(aiweker)长期跟踪和分享人工智能前沿技术、应用、领域知识,不定期的发布相关产品和应用,欢迎关注和转发

评论

发布
暂无评论
调试技巧 | AI工程化部署_c_AIWeker_InfoQ写作社区