在linux下开发难免会遇到bug,但是由于没有图形IDE,导致debug也变得困难,其实只要掌握一些常用的debug工具,一些错误就能很快解决,本文就介绍一些常用的工具用以调试:

log

输出log永远是最简单快捷的调试方式,可以快速定位bug,通过设置日志级别控制日志的输出详略程度,结合一些文本分析工具awk/sed/grep可以快速在大量日志中找到错误信息。

strace

是一个用来跟踪系统调用的简易工具。它最简单的用途就是跟踪一个程序整个生命周期里所有的系统调用,并把调用参数和返回值以文本的方式输出。Strace还可以跟踪发给进程的信号。支持attach正在运行的进程  strace -p <pid>, 当多线程环境下,需要跟踪某个线程的系统调用,可以先ps -efL|grep <Process Name> 查找出该进程下的线程,然后调用starace –p <pid>进行分析。

pstack

用来跟踪进程栈,比如我们发现一个服务一直处于work状态(如假死状态,好似死循环),使用这个命令就能轻松定位问题所在;可以在一段时间内,多执行几次pstack,若发现代码栈总是停在同一个位置,那个位置就需要重点关注,很可能就是出问题的地方;

gdb

经典的调试工具,功能很强大,注意此时编译的时候应该使用-g选项,并用-Og进行优化。多线程下可以attach到进程来调试。

core dump文件

在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写到core文件中,例如我们平时的非法访问内存产生segment fault错误,利用gdb可以查看到到底是哪里发生了异常。有时候可以人为的向进程发送信号kill -11 <pid>,查看此时系统运行的状态,例如多线程下程序突然停住了,此时就可能发生了死锁,可以人为的产生信号,再来分析core dump。

valgrind

包含很多工具:

Memcheck。这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。这也是本文将重点介绍的部分。

Callgrind。它主要用来检查程序中函数调用过程中出现的问题。

Cachegrind。它主要用来检查程序中缓存使用出现的问题。

Helgrind。它主要用来检查多线程程序中出现的竞争问题。

Massif。它主要用来检查程序中堆栈使用中出现的问题。

Extension。可以利用core提供的功能,自己编写特定的内存调试工具。

默认使用的就是memcheck工具,在c++中指针的使用,一不留神就会产生异常,就可以利用memcheck进行检查。个人一般用--track-origins=yes来定位未初始化变量的位置。

tcpdump

抓包用的,在开发网络应用的时候很给力,结合awk/sed/grep可以快速查找网络数据包。

stackoverflow

这个网站是个程序设计领域的问答网站,基本碰到的问题都能在这里面找到答案! 技术氛围很强,从中能学到很多东西。

linux下debug工具的更多相关文章

  1. 哈工大 计算机系统 实验一 Linux下C工具应用

    所有实验文件可见github 计算机系统实验整理 实验报告 实 验(一) 题 目 Linux下C工具应用 专 业 计算机学院 学 号 班 级 学 生 指 导 教 师 实 验 地 点 实 验 日 期 计 ...

  2. Linux下sysstat工具学习

    Linux下,我们多用ssh链接服务器远程操控.对于系统的监控必不可少,sysstat很不错的监控工具包. sysstat官网:http://sebastien.godard.pagesperso-o ...

  3. linux如何ARP嗅探 Linux下嗅探工具Dsniff安装记录

      先来下载依赖包 和一些必须要用到的工具 我这里用的是 dsniff-2.3 的版本 wget http://www.monkey.org/~dugsong/dsniff/dsniff-2.3.ta ...

  4. Linux下同步工具inotify+rsync使用详解

    1. rsync 1.1 什么是rsync rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.它使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这 ...

  5. Linux下应急工具

    Linux下的应急工具 在Linux下,应急的查看点无非那个几个,一是看表现(宕机.高CPU.高内存.高IO.高网络通信),二看连接.三看进程.四看日志.五看文件(Linux一切皆文件),再者结合起来 ...

  6. (转)Linux下同步工具inotify+rsync使用详解

    原文:https://segmentfault.com/a/1190000002427568 1. rsync 1.1 什么是rsync rsync是一个远程数据同步工具,可通过LAN/WAN快速同步 ...

  7. Linux下SSH工具 PAC Manager的安装

    PAC Manager, Linux下类似SecureCRT Xshell的SSH工具,该工具功能上相当的不错,完全可以代替SecureCRT Xshell的功能. PAC (Perl Auto Co ...

  8. Linux下Vim工具常用命令

    原文地址: http://www.cnblogs.com/lizhenghn/p/3675011.html 在linux下做开发,甚至是只做管理维护工作,也少不了Vim的使用.作为一个新手,我也是刚刚 ...

  9. linux下nmap工具的使用

    NMap,也就是Network Mapper,是Linux下的网络扫描和嗅探工 具包,其基本功能有三个,一是探测一组主机是否在线:其次是扫描主机端口,嗅探所提供的网络服务:还可以推断主机所用的操作系统 ...

随机推荐

  1. golang 实现简单的一致性哈希

    package main import ( "fmt" "sort" "hash/crc32" ) var serverMap map[ui ...

  2. 使用EL表达式调用java方法

    首先,新建一个类,类中写一个静态方法 public class PrivilegeUtils { public static Boolean checkPrivilegeByName(User use ...

  3. Git环境配置+VSCode中文乱码问题

    异常处理汇总-开发工具  http://www.cnblogs.com/dunitian/p/4522988.html 1.VSCode中文乱码问题 (files.autoguessEncoding= ...

  4. Mysql(一):初识数据库

    一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...

  5. Java经典编程题50道之三十七

    有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位. public class Example37 { public static v ...

  6. lasy load图片的实现

    无意中看到了这篇关于使用LQIP(Low Quality Image Placeholders) 原文链接,方案实现图片加载优化方案.在此实践一把. 1. 方案实现 页面初始化时,img元素初始化时, ...

  7. iOS视频直播

    视频直播技术点 视频直播,可以分为 采集,前处理,编码,传输, 服务器处理,解码,渲染 采集: iOS系统因为软硬件种类不多, 硬件适配性比较好, 所以比较简单. 而Android端市面上机型众多, ...

  8. PDO学习

    参考: http://php.net/manual/zh/pdostatement.fetch.php http://php.net/manual/zh/pdo.constants.php

  9. 影响JavaScript应用可扩展性因素

    引言:JavaScript 应用变得越来越庞大.这是因为使用JavaScript能做的事情远比我们大多数人所需求的要多得多.我们不能仅因为技术上可行,就去考虑软件系统的扩展问题.为一个不需要扩展的系统 ...

  10. R语言︱数据去重

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:unique对于一个向量管用,对于m ...