GDB调试技巧:深入理解cartographer 2D SLAM算法

需积分: 34 62 下载量 26 浏览量 更新于2024-08-11 收藏 167KB PDF 举报
"这篇文章主要介绍了如何使用GDB调试C/C++程序,特别是如何查看源代码。GDB是一个在Linux环境下广泛使用的命令行调试工具,它提供了丰富的功能,包括程序的启动、设置断点、检查程序状态以及动态改变执行环境等。在使用GDB查看源代码时,需要确保程序在编译时添加了`-g`参数,以便包含源代码信息。" 在GDB中查看源代码主要有以下几个命令: 1. `list<linenum>`:显示程序中指定行号`linenum`周围的源代码,通常是显示该行前后各5行(默认10行)。 2. `list<function>`:显示名为`function`的函数的源代码,通常包括函数定义的上下2行和函数体内的8行(默认10行)。 3. `list`:如果没有参数,GDB将显示当前行之后的源代码。 4. `list -`:相反,如果在`list`后加减号`-`,则会显示当前行之前的源代码。 通过`set listsize<count>`命令,可以自定义一次显示源代码的行数,`count`是你想要设置的行数。这使得你可以根据需要调整查看源代码的范围。 GDB的强大不仅体现在基本的调试功能上,还在于其命令行接口的灵活性,可以通过组合命令形成脚本,实现复杂的调试操作。例如,你可以在程序的不同位置设置断点,然后逐行执行,观察变量的变化,或者在特定条件下继续运行。这对于理解和调试复杂的问题非常有用。 举个例子,考虑以下C程序`test.c`,它计算两个不同范围的累加和: ```c // test.c #include<stdio.h> int func(int n) { int sum = 0, i; for (i = 0; i < n; i++) { sum += i; } return sum; } int main() { int i; long result = 0; for (i = 1; i <= 100; i++) { result += i; } printf("result[1-100]=%ld\n", result); printf("result[1-250]=%d\n", func(250)); } ``` 要调试这个程序,首先需要使用`gcc -g`编译生成带有调试信息的可执行文件: ```bash gcc -g test.c -o test ``` 然后,你可以通过GDB来启动和调试程序: ```bash gdb test ``` 在GDB中,你可以使用`list main`来查看`main`函数的源代码,或者`list 10`来查看第10行附近的代码。在需要的地方设置断点(如`break 19`),然后使用`run`命令启动程序。当程序暂停在断点处时,你可以检查变量的状态(如`print result`),并使用`next`或`step`命令单步执行。 GDB是一个功能强大且灵活的调试工具,对于理解程序的运行机制和定位问题非常有帮助,尤其适合那些需要进行深度调试或自动化调试的场景。虽然它的界面没有图形化调试器直观,但对于熟悉命令行的开发者来说,GDB的控制精度和定制能力是无可比拟的。