创建文件
// main.cpp文件
// 稳态误差
void pid_test_wentaiwucha()
{
float p = 1.5;
int t = 1; // t = 1s;
int target = 5; // 5m/s
float output = 0;
float radis = 3; // 稳态误差
std::cout << "output: " << std::endl;
for(int i = 0; i < 30; i++)
{
std::cout << output << ", ";
float error = target - output;
output += p * error * t - radis;
}
}
//下述代码是模仿话哦的那个窗口代码用于调试
int main()
{
pid_test_wentaiwucha();
return 0;
}
编译文件
使用指令编译出main.out文件
g++ -g main.cpp -o main.out
使用指令开启gdb调试
gdb ./main.out
显示如下
GNU gdb (GDB) EulerOS 8.3.1-12.h1.eulerosv2r9
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-openEuler-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
--Type <RET> for more, q to quit, c to continue without paging--
直接回车进入gdb模式
添加断点指令
(gdb) b main.cpp:13 // 断在文件的某行
// 或者
(gdb) b main // 断在某个函数名
比如断在pid_test_wentaiwucha函数,使用指令
(gdb) b pid_test_wentaiwucha
显示如下
(gdb) b pid_test_wentaiwucha
Breakpoint 1 at 0x401255: file main.cpp, line 149.
使用指令info查看断点
(gdb) info b // 查看所有断点
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000000000401255 in pid_test_wentaiwucha() at main.cpp:149
2 breakpoint keep y 0x0000000000401269 in pid_test_wentaiwucha() at main.cpp:152
使用下述指令开始程序调试
(gdb) r
使用下述指令开始程序调试单步运行
(gdb) n // next 单步调试
如果直接回车是默认使用上一次指令
如果使用下述指令可以快速运行到下一个断点
(gdb) c
使用下述指令可以查看某个变量变化(需研究)
(gdb) watch t //监视t的值发生变化
对于watch指令,如果是全部变量可以直接看,如果不是全局变量可能需要程序跑到函数里才能watch
使用下述指令可以进入函数调试
(gdb) watch s
使用下述指令可以查看变量值,如果是局部变量需要等进入函数内可以查看
(gdb) p t // 查看变量t的值。
使用下述指令可以打开调试窗口
(gdb) layout src
使用下述指令可以暂时开关窗口
1、ctrl+x
2、a
使用下述指令可以打开汇编窗口
layout asm
使用下述指令可以单步调试汇编窗口
si
cMwQ-1719488930729)]
使用下述指令可以暂时开关窗口
1、ctrl+x
2、a
使用下述指令可以打开汇编窗口
layout asm
使用下述指令可以单步调试汇编窗口
si