- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译器内存问题调试技术讲座
软件调试经验交流 zhongguoguojijiankongyanjiuyuzhouzhongxin 编译器选项 目前监控系统采用中的编译器 vc6、intel-c++9.0 solaris-CC CXX6.1…… 以solaris和windows为代表 编译选项的不同会给调试带来不同的结果,需要细致选择 dbx 常用命令 debug/attach debug progname pid attach pid detach/kill up/down /frame frame –h print whereis whatis threads /thread Solaris调试符号 -g 生成调试符号,相关动态库也必须如此生成才能看到源代码 release模式下仅提供栈回溯信息察看 debug模式可以定位到代码行,查看函数参数 可使用strip命令剥离调试符号 Windows编译器选项 /GZ 运行时安全检查 与/Ox冲突 /RTC vs7以上有效,运行时安全检查 /Zi 生成完整的调试信息 与/Ox冲突 /GS 缓冲区安全检查 /Od 禁用优化信息 windbg常用命令 k 显示栈 ~ 显示线程 ~* ~. ~# *全部 .当前 #故障 d/da/db/dd x 查找符号 r 寄存器 .cls g .reload .lastevent gflags—设置系统调试选项 System Registry 对系统设置,所用进程生效 Kernel Flags 对设置后所有新运行进程生效,重起后失效 Image Files 对单个模块生效 gflags Windows系统调试符号的获取 设置环境变量 Set _NT_SYMBOL_PATH = symsrv*c:\localsymbols*/download/symbols 调试包中的SymChk.exe 实用工具 调试符号文件(PDB) 具备时标信息,严格匹配 对于操作系统符号推荐使用SRV语法,动态获取,如需出差可下载离线安装包 /whdc/DevTools/Debugging/symbolpkg.mspx 常见内存问题的分类 设置系统调试标志 PageHeap Application Verifier gflags 内存堆调试的常用调试标志 solaris 使用运行期检查 dbx 使用check –access 相对来说,unix的内存保护机制比windows要好的多,基本上可以在第一现场崩溃 Windows stack unwinding 问题 windows的栈展开依赖于调试符定位,与编译时优化的栈指针省略也有关系。 重新编译程序,匹配调试符号 关闭程序优化 手工构造程序栈参见/en-us/library/cc267826.aspx 栈问题困难所在 操作系统默认不对程序栈进行检查 如果开启FPO,会导致程序真正崩溃时的栈信息错误,无法获取有效信息 栈破坏问题的调试经验 并无特别好的调试方法 常见原因是栈上创建的数组或者字符串越界,开启缓冲区检查,有助于帮助调试该问题 大致定位后仔细跟踪 相对而言,unix系统的情况好一些,一般可以及时发现栈破坏而主动dump 内存泄漏调试的基本方法 无论什么方法,大都是映射到最底层的内存分配/释放调用进行配对,同时记录分配时的调用栈,确定泄漏地址。 工具和方法都不是万能的,并且生成报告相当繁琐,需要仔细查找和耐心分析。 对于引用计数类误报率很高(QString) 内存泄漏 资源泄漏--windows 调试器调试 使用专门的微软检测工具 静态代码检查工具 –漏报率较高 Purify运行时检查 –误报率很高 设置正确的调试标志很重要 内存泄漏-Windows LeakDiag UMDH LeakDiag的使用 UMDH的使用 gflags 设置进程 Create user mode stack trace database 安装系统调试符号 全部下载/在线下载 set _NT_SYMBOL_PATH =srv*c:\websymbols*/download/symbols umdh?-p:2230?-f:c:\Log1.txt? 资源泄漏--solaris dbx 打开check –leaks 使用libumem 使用dtrace libgc 高效自动分配/回收内存 资源泄漏--solaris dbx 1. 使用dbx启动被跟踪的程序。 $ dbx target 2. 用check -leaks打开内存泄漏检查开关。 (dbx) check -leaks 3. 运行程序直至结束。当程序运行结束时,dbx会给出检测报告 资源泄漏-solaris libumem 设置环境变量,使程序预加载li
您可能关注的文档
最近下载
- 【医学课件】 Pseudomonas aeruginosa biofilm formation.ppt VIP
- 瞿同祖中国法律与中国社会.ppt VIP
- 2025年山东省春季高考数学试卷试题真题(含答案解析).pdf VIP
- 2024-2025学年高一下学期《唤醒内驱力——开启自主学习成长之旅》主题班会课件.pptx VIP
- 低钾血症.ppt VIP
- 2025年《大数据营销》考试试卷及答案.pdf VIP
- 江苏省无锡市锡山区天一实验学校2023-2024学年七年级上学期期中数学试题.doc VIP
- 智能交通信息采集技术12_浮动车课件讲解.pptx VIP
- 智学网官网登录入口.docx VIP
- 常用房屋体检设备清单及技术参数、软件要求、数据资产、屋体检报告、评价判定表.pdf VIP
原创力文档


文档评论(0)