一、功能问题
功能问题我建议用控制台输出或者打印日志的去定位会更加高效。首先先梳理一下程序的逻辑,然后在可能出错的位置添加打印信息的代码,然后查看打印出的信息是否符合预期即可。这样也会帮助我们更加熟悉程序的运行逻辑。
二、内存问题
1、当出现内存的问题时,我们采用GDB的调试方法更加高效。
2、另外还有一个Address Sanitizer可以快速检测内存错误的工具。用法如下:
(1)用-fsanitize=address选项编译和链接你的程序。
(2)运行编译出来的可执行文件,如果有地址访问越界、释放后再次使用变量、内存泄露等错误,就会有提示。
3、另外一个值得介绍的就是mprotect函数。
中心思想就是,设置内存访问权限,当写到不该它写的内容的时候,我们让操作系统通知我们,产生段错误Segmentation fault。
三、性能问题
当出现性能问题时,我们采用perf火焰图来定位这个问题:
(1)用 top 命令查看进程 PID。
(2)perf record 命令让 perf 工具记录下运行时的资源占用情况。
(3)perf report 命令读取 perf record 生成的数据文件,并显示分析数据,查看哪个函数占用cpu的时间长。