GDB调试举例以及OpenCV3.4.11的安装及使用示例

一、ubuntu18.04进行GDB调试

1.GDB简介

1)GDB(GNU Debugger)是GNU工程为GNU操作系统开发的调试器,但它的使用不局限于GNU操作系统,GDB可以运行在UNIX、Linux甚至Microsoft Windows。
2)GDB可以调试C、C++、Objective-C、Pascal、Ada等语言编写的程序;被调试的程序可以跟GDB运行于同一台电脑,也可运行于不同电脑。
3)使用GDB我们可以:
– 设置断点使程序停住
– 监视或修改程序中变量的值
– 跟踪代码执行过程
4)编译程序时,通过gcc的-g选项为程序添加调试信息,例如:gcc –g –o helloworld helloworld.c

2.GDB使用

1)安装gdb

//终端输入
sudo apt-get install gdb

2) 启动gdb

gdb

在这里插入图片描述

3)gdb命令

file 装入想要调试的可执行文件。
kill 终止正在调试的程序。
list 列出产生执行文件的源代码的一部分。
next 执行一行源代码但不进入函数内部。
step 执行一行源代码而且进入函数内部。
run 执行当前被调试的程序。
c 继续运行程序。
quit 终止gdb。
watch 使你能监视一个变量的值而不管它何时被改变。
backtrace 栈跟踪,查出代码被谁调用。
print 查看变量的值。
make 使你能不退出gdb就可以重新产生可执行文件。
shell 使你能不离开gdb就执行UNIX shell命令。
whatis 显示变量或函数类型。
break 在代码里设断点,这将使程序执行到这里时被挂起。
info break 显示当前断点清单,包括到达断点处的次数等。
info files 显示被调试文件的详细信息。
info func 显示所有的函数名称。
info local 显示当函数中的局部变量信息。
info prog 显示被调试程序的执行状态。
delete [n] 删除第n个断点。
disable [n] 关闭第n个断点。
enable [n] 开启第n个断点。
ptype 显示结构定义。
set variable 设置变量的值。
call name(args) 调用并执行名为name,参数为args的函数。
Finish 终止当前函数并输出返回值。
return value 停止当前函数并返回value给调用者。
break命令的使用
根据行号设置断点:
(gdb) break linenum
根据函数名设置断点:
(gdb) break funcname
执行非当前源文件的某行或某函数时停止执行:
(gdb) break filename:linenum
(gdb) break filename:funcname
根据条件停止程序执行:
(gdb) break linenum if expr
(gdb) break funcname if expr

4)gdb调试举例

下面的代码实现对一个整型数的反转功能,比如输入123,则输出321
但输入100时,程序的输出结果却不正确,请找出问题
使用vim创建程序RevertNum.c

#include <stdio.h>
void ShowRevertNum(int iNum)
{
    
    
        while (iNum > 10)
        {
    
    
 				printf("%d", iNum % 10);
                iNum = iNum / 10;
        }
        printf("%d\n", iNum);
}
int main(void)
{
    
    
        int iNum;
        printf("Please input a number :");
        scanf("%d", &iNum);
        printf("After revert : ");
        ShowRevertNum(iNum);
}

编译RevertNum.c

gcc -o RevertNum -g RevertNum.c

启动gdb调试RevertNum.c

gdb RevertNum

在这里插入图片描述
在这里插入图片描述
设置断点

b 17               //通过行号设置断点
b ShowRevertNum    //通过函数设置断点

执行并调试程序

run			//开始执行程序
p			//打印表达式的值
c			//执行程序到下一个断点
n			//or s 执行下一行

在这里插入图片描述

3.总结

还不太熟练,需要多加练习

二、Ubuntu18.04下OpenCV3.4.11的安装及使用示例

1.如何在Ubuntu下安装opencv

具体安装细节请参考:【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程

2.使用opencv打开一张图片

首先创建一个代码存放文件夹 code ,然后进入文件夹中。

touch code
cd code

创建一个 test1.cpp 文件。

gedit test1.cpp

将下面的代码复制粘贴进去。
test1.cpp:

#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
    
    
	CvPoint center;
    double scale = -3; 

	IplImage* image = cvLoadImage("lena.jpg");
	argc == 2? cvLoadImage(argv[1]) : 0;
	
	cvShowImage("Image", image);
	
	
	if (!image) return -1; 	center = cvPoint(image->width / 2, image->height / 2);
	for (int i = 0;i<image->height;i++)
		for (int j = 0;j<image->width;j++) {
    
    
			double dx = (double)(j - center.x) / center.x;
			double dy = (double)(i - center.y) / center.y;
			double weight = exp((dx*dx + dy*dy)*scale);
			uchar* ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);
			ptr[0] = cvRound(ptr[0] * weight);
			ptr[1] = cvRound(ptr[1] * weight);
			ptr[2] = cvRound(ptr[2] * weight);
		}

	Mat src;Mat dst;
	src = cvarrToMat(image);
	cv::imwrite("test.png", src);

    cvNamedWindow("test",1);  	imshow("test", src);
	 cvWaitKey();
	 return 0;
}

编译文件:

执行以下命令:

gcc test1.cpp -o test1 `pkg-config --cflags --libs opencv`

gcc编译器:gcc + 文件名 + -o + 输出文件流名称 +` 支持包
输出结果:

执行以下命令:

./test1

3.使用opencv打开摄像头

1)虚拟机获取摄像头权限
使用快捷键 Win + R ,输入 services.msc ,并回车。
在这里插入图片描述
点击 “ 虚拟机 ” ,然后点击 “ 设置(S)… ”。

在这里插入图片描述
选择 “ USB控制器 ” ,将 “ USB兼容性 ” 设置为 “ USB 3.0 ” ,并点击确定。

在这里插入图片描述
选择 “ 虚拟机 ” ,再选择 “ 可移动设备 ” ,再选择 “ Quanta USB2.0 VGA UVC WebCam ” ,最后点击 “ 连接 ” ,再弹出的窗口内点击 “ 确定 ” 。
2)播放视频
创建一个 test2.cpp 文件

gedit test2.cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
    
    
	//从摄像头读取视频
	VideoCapture capture("man.mp4");
	//循环显示每一帧
	while(1){
    
    
		Mat frame;//定义一个Mat变量,用于存储每一帧的图像
		capture >> frame;//读取当前帧
		if(frame.empty())//播放完毕,退出
			break;
		imshow("读取视频帧",frame);//显示当前帧
		waitKey(30);//掩饰30ms
	}
	system("pause");
	return 0;
}

编译运行 test2.cpp:

g++ test2.cpp -o test2 `pkg-config --cflags --libs opencv`
./test2

猜你喜欢

转载自blog.csdn.net/lyjccchong/article/details/109408579