zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    msp430入门学习43
    msp430入门学习42
    msp430入门学习41
    msp430入门学习40
    msp430入门学习37
    msp430入门学习36
    msp430入门学习35
    JAVA三大特性之三——多态
    JAVA三大特性之二——继承
    JAVA三大特性之一——封装
  • 原文地址:https://www.cnblogs.com/pusidun/p/12833490.html
Copyright © 2011-2022 走看看