当前位置:网站首页>代码调试core-踩内存
代码调试core-踩内存
2022-07-06 19:03:00 【帅气滴点C】
定位方法:
- gdb:
- 通过gdb对内存打断点(watch) ,看看谁非法访问了该内存区域。然后逐步缩小范围。直到找到对应的函数段,比如:
- 比如发现0x800 地址被踩。
- 首先判断该地址是否合法,也就是0x800是否应该存在,如果不应该存在,则可以watch这个地址,也可以代码不断运行,期间不断打印该地址,看哪段代码修改了。
- 比如发现0x800 地址被踩。
- 局限
- 问题出现在启动阶段,来不及设断点,不好定位,
- 有些系统不支持gdb
- 被踩地址不固
- 通过gdb对内存打断点(watch) ,看看谁非法访问了该内存区域。然后逐步缩小范围。直到找到对应的函数段,比如:
- 类似内存泄漏的问题,先定界,后定位,通过内存proc信息(meminfo/media-mem)判断是具体的模块,内存段。也可以用MMU(linux下可以用mrotect)对特定区域进行保护
- 局限
- MMU保护的最小单位是一个内存页,有可能被踩区域较小,无法用mmu进行保护
- 局限
- 减法缩小范围,裁剪模块,修改应用程序,找到最小场景
- 加打印,打印出异常和怀疑的地址;也可以dump出被踩地址的数据,查看数据特征,根据数据特征分析从哪里来。
- valgrind+effence+ksan等工具
常见的问题
- 类型转换出错
- 比如小转大,包括常见的char和int,以及自定义结构体
- 包括形参
- 使用已经释放的地址
- 比如malloc或者没有申请控件就使用
- 申请的内存太小,不够用,类似与越界
如何避免
- 函数嵌套不要太深
- 代码要对称,malloc对应的位置一定要释放
- 数组大小要注意
边栏推荐
- MySQL
- The third season of ape table school is about to launch, opening a new vision for developers under the wave of going to sea
- CSDN summer camp course project analysis
- 测试优惠券要怎么写测试用例?
- 豆瓣平均 9.x,分布式领域的 5 本神书!
- Real project, realized by wechat applet opening code (end)
- 本周 火火火火 的开源项目!
- 压缩 js 代码就用 terser
- Introduction to FLIR blackfly s industrial camera
- Here comes a white paper to uncover the technology behind Clickhouse, a node with 10000 bytes!
猜你喜欢
如何设计好接口测试用例?教你几个小技巧,轻松稿定
Alibaba cloud middleware open source past
Web3对法律的需求
3 -- Xintang nuc980 kernel supports JFFS2, JFFS2 file system production, kernel mount JFFS2, uboot network port settings, and uboot supports TFTP
Integerset of PostgreSQL
Summer Challenge database Xueba notes (Part 2)~
KYSL 海康摄像头 8247 h9 isapi测试
C # / vb. Net supprime le filigrane d'un document word
服装企业部署MES管理系统的五个原因
argo workflows源码解析
随机推荐
安德鲁斯—-多媒体编程
4--新唐nuc980 挂载initramfs nfs文件系统
Code line breaking problem of untiy text box
Tips for web development: skillfully use ThreadLocal to avoid layer by layer value transmission
Lumion 11.0软件安装包下载及安装教程
6-6漏洞利用-SSH安全防御
C#/VB. Net to delete watermarks in word documents
C#/VB.NET 删除Word文檔中的水印
leetcode:736. LISP syntax parsing [flowery + stack + status enumaotu + slots]
投资的再思考
MMDetection3D加载毫米波雷达数据
牛客编程题--必刷101之双指针篇
argo workflows源码解析
MySQL
Processus général de requête pour PostgreSQL
fiddler的使用
GEE升级,可以实现一件run tasks
The empirical asset pricing package (EAP) can be installed through pypi
Apifox,你的API接口文档卷成这样了吗?
Introduction to FLIR blackfly s industrial camera