一、gdb调试
1、gdb调试的三种方式
- 目标板直接使用GDB进行调试。
- 目标板使用gdbserver,主机使用xxx-linux-gdb作为客户端。
- 目标板使用ulimit -c unlimited,生成core文件;然后主机使用xxx-linux-gdb ./test ./core。
例子:
(1)main.cpp
#include "sum.h"
using namespace std;
int main(int argc, char *argv[])
{
if(argc != 2){
cout << "please start with 2 values!" << endl;
return -1;
}
else{
Sum s;
int ret = s.add(atoi(argv[1]));
cout << "add result = " << s.getResult() << endl;
}
return 0;
}
(2)sum.h
#include <iostream>
using namespace std;
class Sum{
public:
Sum(){}
~Sum(){}
int add(int value);
int getResult();
private:
int _result = 0;
};
(3)sum.cpp
#include "sum.h"
int Sum::getResult()
{
return _result;
}
int Sum::add(int value)
{
int result = 0;
cout << "input value = " << value << endl;
for(int i = 0; i < value; i++){
result += i;
}
_result = result;
return result;
}
2、编译及运行
编译:
g++ main.cpp sum.h sum.cpp -o add -g
运行:
(法一):gdb + 编译后的文件名,然后输入run(简写r)即可运行。
(法二):命令行中先输入gdb,按回车,再输入file + 编译后的文件.
退出:q
注:cmake项目,在CMakeLists.txt文件中添加如下语句:
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
3、断点
(1)设置断点
设置断点可以通过b或者break设置断点,断点的设置可以通过函数名、行号、文件名+函数名、