调试技巧 | AI 工程化部署
调试技巧:GDB
1. 什么是 GDB
当我们的程序出现问题且不知道具体的原因时,我们就需要对程序进行调试分析,这时 GDB 调试工具就会起到很大作用。
GDB 是 GNU 开源组织发布的一款强大的 Unix 下的程序调试工具,在 Linux 系统中应用非常广泛。它可以用于调试 C,C++,Objective-C 等语言编写的程序。
2. GDB 基本使用
GDB 安装:在 Linux 系统中,你可以通过包管理器来安装 GDB。例如在 Ubuntu 中,你可以使用
sudo apt-get install gdb
来安装。GDB 基本命令:
gdb your_program
:启动 GDB,其中your_program
是你想要调试的程序名。run
:运行程序。break main
:在 main 函数处设置断点,也可以选择行数。break your_function
:在your_function
函数处设置断点。continue
:继续执行程序,直到遇到下一个断点或者程序结束。step
:进入函数内部调试。next
:执行下一行代码,不进入函数内部。print variable_name
:打印变量值。info local variables
:查看当前函数的所有局部变量。quit
:退出 GDB。GDB 断点调试:
假设我们有一个 C 语言程序,文件名为example.c
,我们想要在 main 函数的第 5 行代码处设置断点,并查看该行的变量值。
首先,我们需要使用 gcc 编译程序时加入调试信息:
然后,我们可以使用 gdb 启动程序进行调试:
在 gdb 中,我们可以使用break main
命令设置断点,然后使用run
命令运行程序:
当程序执行到 main 函数的第 5 行时,程序会停止执行,这就是所谓的“断点”。此时我们可以使用print variable_name
命令查看变量的值,例如:
其中,x
是我们想要查看的变量名。如果我们要继续执行程序直到下一个断点或者程序结束,我们可以使用continue
命令。如果我们想要进入函数内部调试,可以使用step
命令;如果我们想要执行下一行代码而不进入函数内部,可以使用next
命令。如果我们想要查看当前函数的所有局部变量,可以使用info local variables
命令。最后,如果我们想要退出 gdb,可以使用quit
命令。
CORE 文件
在 Linux 系统中,"core 文件"通常指的是一种调试文件,它是程序发生崩溃时由操作系统生成的文件。当一个程序崩溃时,操作系统会创建一个名为"core"的文件,通常在程序崩溃时所在的目录中生成,文件名为程序的名称加上".core"后缀。
要生成 core 文件,可以按照以下步骤进行:
确保程序在编译时加入了调试信息。在编译程序时,使用
-g
选项可以生成带有调试信息的可执行文件。例如,使用以下命令编译程序:
当程序崩溃时,操作系统会自动生成一个 core 文件。你可以在程序崩溃时所在的目录中查找该文件。core 文件的命名规则是
program_name.core
,其中program_name
是崩溃的程序名称。使用 GDB 等调试工具打开 core 文件进行分析。你可以使用以下命令使用 GDB 打开 core 文件:
其中,your_program
是编译时的可执行文件名,<core_file_path>
是 core 文件的路径。4. 在 GDB 中,你可以使用各种命令来查看程序的状态、变量的值、堆栈跟踪等信息。例如,你可以使用info registers
命令查看寄存器的状态,使用print variable_name
命令查看变量的值,使用backtrace
命令查看堆栈跟踪等。
通过分析 core 文件,你可以更好地了解程序崩溃时的状态和原因,从而有助于调试和修复问题。
在 linux 系统中,core 文件是默认不打开的。可以通过
版权声明: 本文为 InfoQ 作者【AIWeker】的原创文章。
原文链接:【http://xie.infoq.cn/article/c024c5081b69468b4ae3dc58b】。文章转载请联系作者。
评论