1. 静态程序分析以及动态程序分析
      静态程序分析:使用自动化工具软件对程序源代码进行检查,以分析程序行为的技术,应用于程序的正确性检查、安全缺陷检测、程序优化等;特点是不执行程序。在大型项目中可能会用到静态分析的手段,分析过程中不需要执行整个程序,有助于在项目早期发现以下问题:变量声明但是未使用、变量类型不匹配、变量在使用前未定义等。

    image.png
    动态程序分析:通过在真是或者模拟的环境中执行程序进行分析的方法。

    1. 打印调试

    主机与目标板通过某种接口连接,主机提供调试界面。使用printf/prink进行调试。

    1. 使用gdb调试工具进行调试
      GCC编译时加上-g选项,让编译器在程序中添加额外的调试信息。进行断点、全速运行调试等
    2. 程序静态分析工具splint
      常识性测试并产生一些警告信息。可以检测未经赋值的变量使用,函数的参数未使用等异常情况。
    3. 内存调试
      ElectricFence函数库和valgrind可以用来检查动态内存分配的一些问题,包括内存泄露。

    一种是hook内存管理函数。hook内存管理函数后,你可以通过记下内存分配的历史记录,在程序终止时查看是否有内存泄露,这样就可以找出内存泄露的地方了。你也可以通过在所分配内存的首尾写入特殊的标志,在释放内存时检查该标志是否被破坏了,这样就可以达到检查内存越界问题的目的。

    1. 跟踪
      strace的和ltrace是两个在linux中用来追踪程序的执行细节的跟踪工具。