zoukankan      html  css  js  c++  java
  • 每天学点GDB 4

    本节侧重于如何用各种方法查看变量的值。

    #include <stdlib.h>
    #include <stdio.h>
    
    void show_slogan(char* slogan);
    int counter;
    char* welcome_msg = "you are welcome!";
    int main(int argc, char** argv) {
      int i = 0;
      counter = 0;
      show_slogan(welcome_msg);
      return 0;
    }
    
    void show_slogan(char* slogan) {
      printf("%s\n",slogan);
      counter++;
      printf("you'
    

    编译

    gcc -o test -g test.c
    

    启动gdb

    gdb test
    

    gdb)br 10

    gdb)r

    程序运行至断点1,即行10

    显示局部变量的值

    gdb)info loal

    i = 10

    打印i的地址

    gdb)p &i

    $1 = (int *) 0x7fffffffe7cc

    因为作者当前是64位cpu,故显示为64位指针

    有了指针,就可以使用大杀器"x"

    多费一句话,在gdb中,查看内存中到底放置了哪些东西关键的关键就是要学会使用x并理解其输出内容中的具体含义。

    gdb)x 0x7fffffffe7cc

    显示当前指针中包含的值,与p i的效果相同。

    如果上述i的例子不能让你有较深印象的话,那么就用welcome_msg来说明问题中。

    gdb)p welcome_msg

    $5 = 0x400664 "you are welcome!"

    现在有了welcome_msg的指针,有x来打印内容

    gdb)x/s 0x400664

    0x400664:"you are welcome!"

    想到byte级别,好的使用修饰符c

    gdb)x/16c 0x400664

    0x400664: 121 'y' 111 'o' 117 'u' 32 ' ' 97 'a' 114 'r' 101 'e' 32 ' '
    0x40066c:	119 'w'	101 'e'	108 'l'	99 'c'	111 'o'	109 'm'	101 'e'	33 '!

     想来welcome_msg的例子可以让你切身体会到x的强大之处。

    x后可以跟多种修饰符

    显示x的帮助信息

    gdb) help x

    好了,今天的主要内容就是介绍赫赫有名的x.用好x就可以让内存中的内容无所遁形。

  • 相关阅读:
    Seaslog高性能日志系统学习
    同步、异步与阻塞、非阻塞、协程
    SQL常用增删改查语句
    js里的document对象大全(DOM操作)
    php的cURL资源的初步使用
    hive学习笔记(初级)
    使用NSIS制作可执行程序的安装包
    C#设置一个控件可以鼠标拖动
    C#画图超出屏幕的部分无法显示的解决方法
    C#获取当前不同网卡对应的iP
  • 原文地址:https://www.cnblogs.com/hseagle/p/2989643.html
Copyright © 2011-2022 走看看