Linux工具之开发调试命令
gcc
gcc -E 只预处理
gcc -S 生成汇编代码
gcc -c 生成可重定向目标文件
-Idir 大写的i,头文件目录
-include / -i 要include的头文件,例如gcc hello.c -i /path/hello.h
-L 搜索库路径
-llibrary 小写的L,库名
-g 编译时生成调试信息
-gstabs 此选项以stabs格式声称调试信息,但是不包括gdb调试信息
-gstabs+ 此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.
-ggdb 此选项将尽可能的生成gdb的可以使用的调试信息.
-glevel 请求生成调试信息,同时用level指出需要多少信息,默认的level值是2
-static 禁止使用动态库
-shared 尽量使用动态库
-symbolic  建立共享目标文件的时候,把引用绑定到全局符号上(编译器不一定支持)
-Wall 一般使用该选项,允许发出GCC能够提供的所有有用的警告
-pedantic 允许发出ANSI/ISO C标准所列出的所有警告
-pedantic-errors 允许发出ANSI/ISO C标准所列出的错误
-werror 把所有警告转换为错误,以在警告发生时中止编译过程
-w 关闭所有警告,建议不要使用此项
-Dmacro  相当于C语言中的#define macro
-Dmacro=defn  相当于C语言中的#define macro=defn
-Umacro  相当于C语言中的#undef macro
-undef  取消对任何非标准宏的定义 
-o 指定生成目标名称
-O0 -O1 -O2 -O3 编译优化,缺省值为1
-fpic 编译器就生成位置无关目标码.适用于共享库(shared library)
-fPIC 编译器就输出位置无关目标码.适用于动态连接(dynamic linking)
gdb
vim
知道创宇技能表推荐的一篇文章比较好,酷壳的简明 VIM 练级攻略
摘录一些比较常见的:
w: 到下一个单词的开头
e: 到下一个单词的结尾
% : 匹配括号移动,包括 (, {, [.
*和#:匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
fa :到下一个为a的字符处,你也可以fs到下一个为s的字符。
t, : 到逗号前的第一个字符。逗号可以变成其它字符。
3fa : 在当前行查找第三个出现的a。
pmap
- 显示进程内存映射
 
# -x显示扩展信息,后接进程pid
# Address: 内存开始地址
# 显示信息:
    Kbytes: 占用内存的字节数
    RSS: 保留内存的字节数
    Dirty: 脏页的字节数(包括共享和私有的)
    Mode: 内存的权限:read、write、execute、shared、private
    Mapping: 占用内存的文件、或[anon](分配的内存)、或[stack](堆栈)
    Device: 设备名 (major:minor)
pmap -x 12345
pstack
跟踪进程栈:pstack
strace
跟踪进程中系统调用:strace
eg:
strace -tt -T -f -ff -o file.out -p [PID]
-tt 在输出中的每一行前加上时间信息,微秒级
-T 显示每一调用所耗的时间
-o filename 将strace的输出写入文件filename
-p pid 跟踪指定的进程pid
-f 跟踪由fork调用所产生的子进程.
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号
readelf
可以得到ELF文件各段内容,分析链接、符号表等需要用到
objdump
反汇编,需要理解汇编语言
ldd
程序依赖库查询
# ldd后接可执行文件
# 第一列为程序依赖什么库,第二列为系统提供的与程序需要的库所对应的库,第三列为库加载的开始地址
# 前两列可以判断系统提供的库和需要的库是否匹配,第三列可以知道当前库在进程地址空间中对应的开始位置
ldd a.out
												
											Linux工具之开发调试命令的更多相关文章
- Linux c c++ 开发调试技巧
		
看到一篇介绍 linux c/c++ 开发调试技巧的文章,感觉挺使用,哪来和大家分享. 通向 UNIX 天堂的 10 个阶梯Author: Arpan Sen, 高级技术人员, Systems Doc ...
 - Linux下C++开发常用命令
		
本页面记录本人在Linux下进行C++开发时使用的常用命令,注意这里不包括比如ls,mv等linux命令,这里会持续更新.首先假设你只有一个源程序文件,叫vec.cpp,编译后的可执行程序叫vec(本 ...
 - linux常用命令--开发调试篇
		
前言 Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题.本文将简单介绍一下这些命令. 示例程序 我们用一个小程序,来 ...
 - Linux 常用命令:开发调试篇
		
前言 Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题.本文将简单介绍一下这些命令. 示例程序 我们用一个小程序,来 ...
 - 监控Linux性能的18个命令行工具
		
监控 Linux 性能的 18 个命令行工具 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐 认识到监控和保 ...
 - [转载]监控 Linux 性能的 18 个命令行工具
		
转自:http://www.kuqin.com/shuoit/20140219/338066.html 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一 ...
 - linux下C++开发工具
		
就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, anjuta,kd ...
 - 监控 Linux 性能的 18 个命令行工具[转]
		
对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并运行是多么的不容易.基于此原因,我们 ...
 - 监控 Linux 系统的 7 个命令行工具
		
监控 Linux 系统的 7 个命令行工具: " 深入 关于Linux最棒的一件事之一是你能深入操作系统,来探索它是如何工作的,并寻找机会来微调性能或诊断问题.这里有一些基本的命令行工具,让 ...
 
随机推荐
- MySQL知识-MySQL同版本多实例的配置
			
MySQL多实例的配置 1. 创建需要目录 [root@db01 ~]# rm -rf /data/330{7..9}/data/*[root@db01 ~]# rm -rf /binlog/330{ ...
 - Qt版本中国象棋开发(四)
			
内容:走法产生 中国象棋基础搜索AI, 极大值,极小值剪枝搜索, 静态估值函数 理论基础: (一)人机博弈走法产生: 先遍历某一方的所有棋子,再遍历整个棋盘,得到每个棋子的所有走棋情况(效率不高,可以 ...
 - 百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka
			
一般来说,大型应用通常会被拆分成多个子系统,这些子系统可能会部署在多台机器上,也可能只是一台机器的多个进程中,这样的应用就是分布式应用.在讨论分布式应用时,很多初学者会把它和集群这个概念搞混,因为从部 ...
 - MySQL 可重复读,差点就我背上了一个 P0 事故!
			
小黑黑的碎碎念 哎,最近有点忙,备考复习不利,明天还要搬家,好难啊!! 本想着这周鸽了,但是想想还是不行,爬起来,更新一下,周更可不能断.偷懒一下,修改一下之前的一篇历史文章,重新发布一下. P0 事 ...
 - ES6-json与字符串的转换
			
1.ES5下的json 1.1 基本概念 是对象 简写形式,名字跟值(key和value)一样,留一个就行 方法 :function一块删 即show:function(){...}等价于show() ...
 - 【Mybatis】mybatis开启Log4j日志、增删改查操作
			
Mybatis日志(最常用的Log4j) 官方网站http://www.mybatis.org/mybatis-3/zh/logging.html 1.在src目录下创建一个log4j.propert ...
 - Java实现洛谷 P1616  疯狂的采药
			
题目背景 此题为NOIP2005普及组第三题的疯狂版. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他 ...
 - Java实现 蓝桥杯 算法训练 Pollution Solution
			
试题 算法训练 Pollution Solution 问题描述 作为水污染管理部门的一名雇员,你需要监控那些被有意无意倒入河流.湖泊和海洋的污染物.你的其中一项工作就是估计污染物对不同的水生态系统(珊 ...
 - Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
			
凯撒密码加密 题目 问题描述 给定一个单词,请使用凯撒密码将这个单词加密. 凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文.即a变为d,b变为e,-,w变为z,x ...
 - Java实现最小费用最大流问题
			
1 问题描述 在最大流有多组解时,给每条边在附上一个单位费用的量,问在满足最大流时的最小费用是多少? 2 解决方案 下面代码所使用的测试数据如下图: package com.liuzhen.pract ...