day15练习:

代码调试
1.语法错误:
1.warning:并不影响生成最终的可执行程序,但可能程序运行会出错
2.error:编译代码语法出错,不会生成最终的可执行程序
3.每次修改编译报错的第一个错误,重新编译,再重复完成修改第一个报错的操作,直到语法错误修改完毕为止
2.逻辑错误:
1.打印调试/日志调试:将一些代码加入打印,将信息打印在终端屏幕或者日志文件中,通过查看日志或终端的打印内容,查看代码运行情况
2.GDB调试代码:
gdb是linux系统常用的调试工具,具体使用方法如下:
1.编译代码并加入-g选项:gcc filename.c -g
可以通过file命令查看是否具备调试功能:

2.使用gdb调试代码
gdb a.out
3.通过命令调试代码:
3.段错误:
操作非法内存空间,导致程序崩溃
1.打印法:
在有问题的代码上面和下面加入打印,如果上面能够打印,下面没有打印,则非法内存操作位于两个打印的中间,重复完成上述逻辑,直到找到段错误为止。
2.gdb调试段错误:
程序出现出现段错误时会生成一个包含堆栈调用信息的core文件,通过core文件可以查找出错的位置
1.配置系统让系统中允许生成core文件
4.内存泄露:
1.malloc申请的空间使用完毕后忘记释放,最终导致程序可用变少,这种现象称为内存泄露
2.内存泄露可以使用valgrind工具检测
3.内存泄露检测工具的原理:
通过修改源程序链接的库,来实现用户malloc调用valgrind自己写的malloc函数(具备内存管理和分析功能)
valgrind工具能够将没有释放的代码,或者有问题的代码标注出来,形成一份报告,显示在终端
1.库:
通过ldd可以查看可执行程序链接的库文件:ldd a.out
1.静态库
在程序编译过程中将库文件链接到程序中,文件名以.a结尾
会使可执行程序代码体积增大
编译可移植性程序后,删除库文件,对程序代码没有任何影响
程序代码编译好后(因为本身包含库文件),可以脱离库文件使用,免安装直接可以使用可执行程序
每个程序都拥有一个静态库,稍显浪费空间
2.动态库
在运行时加载到程序中,文件名以.so结尾
不会使代码体积增大
编译可移植性程序后,删除库文件,对程序代码没有任何影响
程序代码编译好后,无法脱离库文件使用
多个程序代码可以共用一个库文件
1017

被折叠的 条评论
为什么被折叠?



