调试技巧总结

  以下内容总结自debug hacks一书的高手们的调试技术一章

  1.strace的使用技巧

    strace name,以这样的方式运行程序,可以查看到程序运行时的系统调用,仅仅是系统调用。可以看到系统调用失败时的传参,或者卡在哪个函数位置等等。

    -i选项可以看到每个系统调用的地址,那样在使用gdb调试时可以加断点。

    -p选项可以attach上已经正在运行的程序

    -o可以指定输出文件

    -t和-tt可以指定系统调用时间,分别以秒和毫秒为单位。

  2.objdump的使用技巧

    objdump反汇编之后的文件往往很难看出来对应于c程序中的哪一行代码,这个时候可以指定-S和-l选项分别显示出源文件中的代码和行号,程序需要包含有调试信息,最好是没有优化选项的文件,但不一定完全对应,可以作为参考。

  3.valgrind的使用技巧

    valgrind可以对缓存,堆进行评测,检测POSIX线程冲突等。

    最常用的内存检测,--tool=memcheck这个工具是valgrind的默认工具,可以不指定。

    可以检测的内容有,内存泄露,非法内存访问,读取未初始化区域,访问已释放区域,内存双重释放,非法栈操作等等。但是valgrind对于栈上的空间检测不是很好。

  4.kprobe的使用

    这个属于内核调试技术,可以在不重新编译内核的基础上,在任何一个函数内加打印,或者做其他任何处理,当然需要有内核源码,做一个合适的操作。

    比较好的一点是可以显示栈跟踪。这在调试中属于很好的技术。

  5.jprobe的使用

    与kprobe相同,可以检测任何一个内核函数的使用情况,但是jprobe的优点在于侦测函数的参数和被侦测函数的参数一样,可以很方便的打印出传参,而不像kprobe需要通过堆栈或者寄存器推理。

    其实我觉得以上两个工具对应于gdb就是断点。

  6.kprobe的强大之处

    kproble强大他可以插入内核任意位置,而不像jprobe只能插入在函数的开头处,包括他还在可以插在某条指令执行后还是某条指令执行前。

  7.kprobe替换内核函数

    kprobe可以替换内核中的某个函数,这样就可以在内核不重新编译的情况下,调试某个函数的情况。

  8.KAHO替换应用程序函数

    类似于上一个kprobe的功能,这样可以省的再次编译大型的应用程序。

  9.systemtap的使用

    这个工具是利用kprobe实现的一个工具,但是他是类似于脚本语言的方式来使用的,更加方便。功能有,查看堆栈,内部数据,等等。在应用程序的调试中就是gdb工具。

  10./proc/meminfo中的宝藏

    这个可以用作内存检测,他与valgrind相比,valgrind必须在程序运行结束时才给出测试结果,但这个可以直接实时看到。

  11./proc/<pid>/mem快速读取进程的内容

    和gdb或者ptrace一样,是查看内存的功能,但是速度上要快。

  12.oom killer

    当内存不足时,系统会对每个应用进程进行评分,评分最高者被关闭。

  13.错误注入

    一般来讲,malloc都会是成功的,但是这样就很难检测一些如果分配失败时导致的错误。那么这个功能就是提高分配失败的概率,或者说指定分配失败。

    需要连接一个failmalloc的库。方便测试失败情况。

  14.oprofile的使用

    这个工具可以查看一个程序的性能,比如l2级缓存的命中,各个函数的运行时间等等,并且这个工具可以生成图表。

    最常用的是各个函数的运行时间。

    类似的工具还有gprof,但是功能上差很多

    另外一个要注意的是,oprofile在虚拟机下不支持按事件计数。比较明显的是各个函数的运行时间检测不支持

  15.vprobe

    找不到相关资料

  16.查看x86机器是否支持64位

    这一点可以通过查看cpu自带的寄存器内容或者/proc/cpuinfo中的内容

时间: 2024-10-31 15:25:49

调试技巧总结的相关文章

Chrome 中的 JavaScript 断点设置和调试技巧

你是怎么调试 JavaScript 程序的?最原始的方法是用 alert() 在页面上打印内容,稍微改进一点的方法是用 console.log() 在 JavaScript 控制台上输出内容.嗯~,用这两种土办法确实解决了很多小型 JavaScript 脚本的调试问题.不过放着 Chrome 中功能越发强大的开发者工具不用实在太可惜了.本文主要介绍其中的 JavaScript 断点设置和调试功能,也就是其中的 Sources Panel(以前叫 Scripts).如果你精通 Eclipse 中的

一探前端开发中的JS调试技巧

前言:调试技巧,在任何一项技术研发中都可谓是必不可少的技能.掌握各种调试技巧,必定能在工作中起到事半功倍的效果.譬如,快速定位问题.降低故障概率.帮助分析逻辑错误等等.而在互联网前端开发越来越重要的今天,如何在前端开发中降低开发成本,提升工作效率,掌握前端开发调试技巧尤为重要. 本文将一一讲解各种前端JS调试技巧,也许你已经熟练掌握,那让我们一起来温习,也许有你没见过的方法,不妨一起来学习,也许你尚不知如何调试,赶紧趁此机会填补空白. 骨灰级调试大师Alert 那还是互联网刚刚起步的时代,网页前

js调试技巧 Firefox调试技巧汇总

Firebug入门指南        :  http://www.ruanyifeng.com/blog/2008/06/firebug_tutorial.html Firebug控制台详解: http://www.cnblogs.com/see7di/archive/2011/11/21/2257442.html    http://www.cnblogs.com/leejersey/archive/2012/11/27/2790998.html debugger: js中调用console写

5个Xcode开发调试技巧

转自Joywii的博客,原文:Four Tips for Debugging in XCode Like a Bro 1.Enable NSZombie Objects(开启僵尸对象) Enable NSZombie Objects可能是整个Xcode开发环境中最有用的调试技巧.这个技巧非常非常容易追踪到重复释放的问题.该技巧会以非常简洁的方式打印指出重复释放的类和该类的内存地址. 怎么开启僵尸对象呢?首先打开 Edit Scheme (或者通过热键?<),然后选择Diagnostics选项卡,

(转) Java程序员应该知道的10个调试技巧

原地址:http://www.csdn.net/article/2012-09-03/2809495-java-debugging-tips-with-eclipse 调试可以帮助识别和解决应用程序缺陷,在本文中,作者将使用大家常用的的开发工具Eclipse来调试Java应用程序.但这里介绍的调试方法基本都是通用的,也适用于NetBeans IDE,我们会把重点放在运行时上面. 在开始之前,推荐大家去看看Eclipse shortcuts这篇文章,它将会给你带来很多方便.在本文中使用的是Ecli

Ganglia 调试技巧

Gmond # 检查Gmond服务是否正在运行,发出如下命令:ps aux | grep gmond 输出: root      8046  0.0  0.0 103244   844 pts/0    S+   09:38   0:00 grep gmond nobody   25759  1.8  1.0 206388 82356 ?        Ssl  Apr28 208:45 /usr/local/sbin/gmond --conf=/etc/ganglia/gmond.conf #

VS2010常用调试技巧(1)

调试是一个程序员最基本的技能,其重要性不言自明.不会调试的程序员就意味着他即使会一门语言,却不能编制出好的软件.本文就本人在开发过程中常用的调试技巧作下简单呢介绍,希望对大家有所帮助,能力超群者请绕道. 1.单步调试(F10) 在Debug状态下,按下F10,逐行进行调试. 2.逐句调试(F11) 在调试状态下,按下F11,会逐句调试,遇到函数会进入函数内部调试. 3.跳到当前光标处(Ctrl+F10) 我经常看到有些初级程序员,为了到达目标代码位置,在程序运行前就早早设定了断点,然后反复按F1

Chrome调试折腾记_(3)JS断点调试技巧

JS调试技巧 技巧一:格式化压缩代码 技巧二:快速跳转到某个断点的位置 右侧的Breakpoints会汇总你在JS文件所有打过的断点,点击跟checkbox同一行的会暂时取消这个断点,若是点击checkbox下一行的会直接跳转到该断点的位置 技巧三:查看断点内部的作用范围[很实用] 右侧的scope可以看到相当多实用的信息,比如this的指向,是否有值,断点是对象还是其他等.. 技巧4:监听事件断点 右侧的Event Listener Breakpoints可以选择性的监听某类行为事件,比如键盘

网页调试技巧:抓取马上跳转的页面POST信息或者页面内容

http://www.qs5.org/Post/625.html 网页调试技巧:抓取马上跳转的页面POST信息或者页面内容 2016/02/02 | 心得分享 | 0 Replies 有时候调试网页或者抓别人网页的POST包的时候. 总会遇到这样的尴尬,我们需要抓取POST提交的信息. 或者获取POST完成页面返回的代码. 但是,目标页却马上就跳转了,导致,还没来得及Esc呢,页面就已经刷新了. 这种情况,起码谷歌浏览器的F12是搞不了了... 比如下面的情况 我把密码放在 被Post页面的源码

iOS各种调试技巧豪华套餐

转载自http://www.cnblogs.com/daiweilai/p/4421340.html 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Global BreakPoint) 条件断点(Condational Breakpoints) 打印的艺术 NSLog 开启僵尸对象(Enable NSZombie Objects) 进击的码农 Console(lldb 命令) Profile(instruments) Xcode视图调试 结语 前言 最近博主临近毕业季