zoukankan      html  css  js  c++  java
  • 可执行文件生成,依赖项检测,gdb调试命令

    一、编译,生成执行文件,预处理 -> 编译(译为汇编代码) -> 汇编 -> 链接 -> 可执行文件
    • gcc,g++
      • gcc -g hello.c -o hello
      • g++ -g hello.cpp -o hello
      • gcc main.c -o gdb-sample -g // 生成调试文件使用
              // -o 参数指定了编译生成的可执行文件名为 gdb-sample,使用参数 -g 表示将源代码信息编译到可执行文件中
              gdb // 开始执行gdb命令
              file gdb-sample // 打开生成的gdb文件
    • make,需先手动/自动生成Makefile文件,make内置gcc,g++
      • makefile:cmake -DCMAKE_DEBUG_TYPE=debug  -->  make,调试版本与发布版本
      • 根据Makefile内容可生成是否具有调试信息的可执行文件
     
    二、查看文件依赖项
    • ldd
      • ldd program(可执行文件) 查看当前可执行文件运行库支持
      • ldd /bin/ls 查看当前链接的库地址
    • pmap
      • objdump -p /usr/local/php/bin/php |grep NEEDED
      • pmap pid |head 查看当前进程pid,使用哪些运行库 
     
    三、gdb/cgdb调试:
    • 启动 >> gdb与cgdb的区别是后者分页能看到当前代码页,便于使用者阅读:
      • 未有pid,cgdb/gdb program
      • 已有pid,cgdb/gdb program pid ,改pid为需要调试程序,如果program为服务程序,就可以将pid程序用gdb来调试,也可分两步执行,先启动program,然后在命令输入pid
      • r(run),启动
      • cgdb program core,core为当前program程序运行异常崩溃,直接启动可以显示崩溃信息(堆栈内容,PS:有时需要设置系统命令“ulimit -c unlimited”才能产生core文件)
      • cgdb窗口切换,按esc键可让输入焦点进入到vi窗口,再按i键回到gdb窗口。按其它键也可以进入到vi窗口,比如小键盘上的按键(如果此时Num Lock处于打开状态)
    • start >> 开始执行程序,停止在main函数开始处
    • 打印
      • 普通类型变量:p var (p /x var 十六进制显示)
        • x 按十六进制格式显示变量
        • d 按十进制格式显示变量
        • u 按十六进制格式显示无符号整型
        • o 按八进制格式显示变量
        • t 按二进制格式显示变量
        • a 按十六进制格式显示变量
        • c 按字符格式显示变量
        • f 按浮点数格式显示变量
      • 指针*val: p *var;boost::shared_ptr<T> val,p ((*T)var)->name(or function),p val->px->name(or function)
      • 非指针类型地址val: p &var
      • 数组a:p *a@10显示 数组a内的10个元素
      • call function,执行function方法,直接显示返回值,如果返回为void,不显示
      • p function,与call类似,返回值为void也就显示
    • info
      • info files 查看当前调试文件信息
      • info break 查看断点信息
      • info frame 查看当前方法语言
      • info local 显示当前函数局部变量信息
      • info var 显示所有全局及静态表里名称
      • info func 显示所有函数名称
      • info prog 显示被调试程序执行状态
      • info signals 显示gdb支持哪些信号
    • 线程、堆栈
      • bt,查看堆栈
        • f number 查看当前number代码
        • up 上移一栈,使得当前为执行函数
        • down 下移一栈
      • info threads 查看当前所有线程,其中前面加“*”线程为当前运行线程
      • thread id 切换当前调试线程位制定id的线程,适用于多线程环境
      • thread apply id1 id2 command 线程id1 id2执行command命令
      • thread apply all command 所有线程执行command命令
      • where 查看程序出错地方
      • 多线程 set scheduler-locking off|on|step,使用多线程调试会发现,在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,可设置此参数来防止其它线程执行
        • off不锁定任何线程,也就是所有线程都执行,这是默认值
        • on只有当前被调试程序会执行
        • step在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行
    • 查看文件
      • list n1 n2 显示当期啊弄文件n1行到n2行之间的代码
      • list file:number 显示file文件number行附近代码 
      • list file:function function函数代码
    • 其它
      • jump number 强制跳转到 number 行执行
      • n 执行下一行
      • s 单步执行,进入函数内部
      • enter 执行上一步操作
      • return 返回当前调用
      • until 执行当前循环下一行
      • until file:number 执行到当前number行
      • finish 执行完成当前调用方法
      • kill 终止当前调试进程
      • file app 载入app可执行程序,调试
    • show 
      • show language 查看当前语言
      • show args 显示缺省参数列表
      • whatis var 显示变量var类型
      • ptype var 显示变量类型,如果var是结构体会显示全部内容
    • set
      • set args no修改启动参数,参数args[1]为no,也可启动r + 参数,如 r no 
      • set language c++ 手动设置当前程序语言为c++
      • set language 查看可设置语言
      • set variable i=1 设置成员变量值
    • 断点
      • info break 显示断点
      • b file:number 下断点
      • b file:number if(condition) 下断点,满足condition时,停止
      • b file:number thread id if(condition) id为线程id
      • del break num 删除num行断点
      • disable break num 禁用断点
      • enable break num 启用断点
      • enable once break num 启用一次后禁用
      • clear 删除刚才停止处断点
      • clear file:number 清除number行所有断点
      • watch i>100 监视,当i满足这个条件是,停止
    • 信号signal,gdb可接受外部信号来处理当前程序状态
    • 多进程
      set follow-fork-mode child
      set detach-on-fork off
  • 相关阅读:
    [跟我学spring学习笔记][更多DI知识]
    [跟我学spring][Bean的作用域]
    [跟我学spring学习笔记][DI循环依赖]
    [跟我学spring学习笔记][IoC]
    [跟我学Spring学习笔记][DI配置与使用]
    [Spring入门学习笔记][静态资源]
    [Spring入门学习笔记][Spring的AOP原理]
    介绍map.entry接口
    hashmap的遍历方法
    java中的队列
  • 原文地址:https://www.cnblogs.com/Lucky-qin2013/p/6475110.html
Copyright © 2011-2022 走看看