linux程序设计,MySQL与gdb调试学习,第二次调试时速度明显上升

前言

我的技术博客本来是要一周更新一次的。笔记本上的知识已经记下来了一大堆,但是因为自己的懒惰延期了。


首先我自己得好好反省一下,这一周之后不能再呆在宿舍里写代码学习了。毕竟宿舍休息玩耍实在是太方便了,自己稍稍不注意就又开始玩起了手机,或者漫无目的的上网了。学习还是得去自习室,隔离了这些条件,学习的速度会好的多。


好了,废话少说,先总结总结这周的学习吧。

首先是第八章:MySQL

这一章开始之前我还是感到很害怕的,毕竟数据库这个东西我一直都觉得特别的难(其实只不过是本科的时候只听了名字,一直没有接触而已。。。)第一步就是安装MySQL了,我使用yum list查看之后发现有可用的MySQL的安装包,但是奇怪的是居然安装不上去,然后出来一个MariaDB的玩意。我搜索了一下发现,原来CentOS7已经把默认的数据库改成这个MariaDB了,MySQL不再是默认的数据库程序了,好吧,于是在网上找了一个安装教程很快的完成了安装。然后照着书上的操作,给MySQL的root用户设置了密码。设置完成之后exit退出了数据库。

-L/usr/lib/mysql

然后。。我登陆不上了。。命令行:

mysql -u root mysql

显示我的密码错误。可是都没有让我输入密码好嘛。。。 发火。接着看下去才发现要加个-p输入密码。。。好吧,我太着急了。。继续往下看。。

照着课本输入代码。敲了一段之后,大概感觉就是这样了:

SELECT sth FROM someDB WHERE some condition
大概就这样了。。 不过我知道数据库里的东西特别的多,所以打算学完这个之后还得自己找一本MySQL的书好好入门。

然后就是使用C语言和mysql通信,大概就几个函数,mysql_init, mysql_real_connect, mysql_query等等几个,学习了 这么多之后,我发现我学了这么多的代码,函数,其实都没办法记住,学习的时候敲下的代码,过不了多久就会都忘了, 所以这时我觉得我一定得自己找一个项目好好编写了。不然我学习的东西都会忘得很干净。mysql的学习其实也就是这些函数使用的熟悉,我现在回头来看,这些东西其实真的忘得差不多了。更别提几个月之后了。

熟悉了mysql 的基本操作函数之后,就开始编写cd管理程序的mysql版本了,这个版本代码的实习我读完一遍之后发现比起之前的实在要简单太多了,获取数据,查找数据只需要一条mysql语句。返回的数据使用接口函数读出就行。不过虽然看起来简单,编写完之后,自己的代码还是出了一些问题。

首先是编译的时候。因为我的电脑是安装的64位的linux系统。所以

-L/usr/lib/mysql
需呀改成
-L/usr/lib64/mysql
这个问题最开始也纠结了快半个小时。自己上网学习,明白了-L的含义之后就明白是去找动态库了。花了点时间就找到了lib64里的动态文件了。


调试部分的经验,上一次调试学习到的经验这次帮了不少忙了,以前我从来都不看warning,因为我觉得我自己编写的代码我明白要实现的是什么功能, 但是上次之后我才发现,编译的时候有许多的implicit 转换,默认是允许的,这些隐式转换常常会带来大问题。这一次调试之前,就把所有的warning都给解决了再开始运行代码。

调试一个让我吐血的地方。

sprintf(qs, "hello world %s\n", cd_id);
写成了这样:
sprintf(qs,"hello world %s\n"), cd_id;
我把本该在括号内的数据写在了括号外。 而由于逗号运算符,该行的结果是cd_id的值,结果程序为报错也没有警告,查了非常久才发现。


第九章:开发工具

这一章主要说的是如何使用make命令已经makefile文件的编写。学的一些东西感觉基础就够了,很多东西可能暂时都用不上。所以很快就扫过了一遍。然后源代码管理,先是RCS,SCCS感觉东西太老了,网上查了一下现在git用的比较多,或者是svn 也就是subversion。大致的实验了一下,就过去了。打算有时间的时候再来学习一下git的使用。正好也可以把自己的代码更新上github。


第十章 调试,

学习了这么久,调试了这么久的bug,总算是学习到了调试工具了。以前在vs上编程感觉调试是非常的简单的,毕竟vs的调试功能真的是非常的好用,现在来到了大名鼎鼎的gdb程序了。我要好好看看该怎么调试自己的程序.

调整好心态之后就开始了吧。书上给出了一个冒泡算法的实现程序。我稍微读了一下然后立刻发下bug了。。。摔!我这还怎么学。。

不管了,先看下去再说吧,最开始说的方法我以前自己就会了,赶紧继续往前吧。来到了gdb调试部分。

首先程序编译的时候需要加上-g来编译,这样使用gdb调试的时候才能有变量和函数才能有名字,而不是一个孤零零的一个地址值。然后使用gdb function开始运行程序了。

首先使用run使程序跑起来。程序出错后使用backtrace,可以查看到程序是如何进入到错误的部分的,比如可以看到这个子程序是怎么样在main函数中被调用的。

可以使用print 变量名, 来打印变量的值,使用list可以打印出出错部分的源码。学习到这里我不禁感到真难用,在vs里我基本滚滚鼠标就可以看到了。。

下一步,设置断点。

help breakpoint
出来了一大堆说明,简直没法学了。。直接按照课本设置吧。。break 21 在第21行设置断点 coutinue继续运行。 command设置在断点的行为,

然后直接在断点处打补丁, 

set variable n =n+1;
这个还是一个很棒的设定,我可以直接继续运行,而不用重新编译了。然后就是深入学习gdb的建议了。。。好吧,说的太简单了。以后有时间在好好找本书入门吧。

后面的几个调试 工具,我的CentOS7里都没有了,也是非常快速的跳过了。

你可能感兴趣的:(linux程序设计,MySQL与gdb调试学习,第二次调试时速度明显上升)