嵌入式学习day16

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结尾

                                不会使代码体积增大

                                编译可移植性程序后,删除库文件,对程序代码没有任何影响

                                程序代码编译好后,无法脱离库文件使用

                                多个程序代码可以共用一个库文件

                

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值