• LINUX


    【基本条件】

    编译时需要加--gcc -g选项;

    【基本命令】

    l 查看源码
    b 加断点
    r 开始运行调试
    n 下一步
    s下一步但是会进入子函数
    p 输出数据
    c跳过直到下一个断点处
    q表示程序退出

    help 查询指令,可以使用help来查看其他指令的用法,例如help print;同【man】

    shell 启动标准shell执行command,可以用exit退回gdb;

    print 打印指令,可以 p/x[十六进制]  p/d[有符号整形] p/u[无符号整形] p/o[八进制] p/t[二进制] p/a[作为一个地址] p/c[ascII码] p/f[浮点型] p/s[字符串] 

    examine 查看内存,与程序数据类型无关 简写为x

    disassemble 反汇编 disassemble/m main 把代码合反汇编放在一起看;

    info args 查看当前函数参数值
    info locals 看当前函数栈上值信息
    info registers 表示查看寄存器值
    info symbol 堆栈

    info thread 查看线程状态

    info breakpoint 查看断点信息

    ------------------------------------------------------自定义命令开始------------------------------------------------------

    def opso  //自定义一个操作,直到走到end

    bt //输出堆栈xinxi

    call test_show() //调用函数打印信息

    p/x g_name //查看变量

    finish //结束进程

    i r //查看寄存器

    Detach

    q

    end

    ------------------------------------------------------自定义命令结束,执行自定义命令开始------------------------------------------------------

    b test_break //打断点,当断点到此时,会执行以下command

    commond

    opso

    end

    ------------------------------------------------------执行自定义命令结束------------------------------------------------------


    b 17 if i == 8. 在17行设置一个断点,并且只有i==8的时候才会触发
    d 后面跟断点索引1,2,3..(每打一个断点,都会有相应索引号)
    clear 行数或名称. 删除哪一行断点. 看下面演示

    【解析core文件】

    ulimit -c unlimited
    echo "/tmp/core-%e-%p" > /proc/sys/kernel/core_pattern
    gcc -o main -g a.c
    gdb main /tmp/core-main-10815

    【数据断点】

  • 相关阅读:
    文件下载并删除
    程序输出
    什么是并发
    跨站脚本攻击为什么要过滤危险字符串
    正则表达式——极速入门
    输出的为X= 1 ,Y = 0;
    Eclipse+MyEclipse安装及环境配置
    J2EE有三个开发环境级。
    TCP和UDP的区别
    asp.net2.0导出pdf文件完美解决方案(转载)
  • 原文地址:https://www.cnblogs.com/wangqiwen-jer/p/10986878.html
Copyright © 2020-2023  润新知