zoukankan      html  css  js  c++  java
  • 常用GDB命令

    记录一下常用的GDB命令,

    首先要用GCC -g编译:

    gcc -g [源文件1, 源文件2...] -o [编译后的可执行文件]

    启动GDB:

    gdb [编译后的可执行文件]

     

    进入GDB后的信息:

    GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2) 7.4-2012.04
    Copyright (C) 2012 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "i686-linux-gnu".
    For bug reporting instructions, please see:
    <http://bugs.launchpad.net/gdb-linaro/>...
    Reading symbols from /home/peng1/Dropbox/CProgram/cpro1...done.
    (gdb)

    好了,以后的命令都是在这个”(gdb)”的提示符下进行的

    命令list [行号], 列出源代码,不加行号,默认从第一行开始,列出10行,再l则会列出下面的10行:

    (gdb) l
    1	#include 
    2	#define MAXLINE 1000
    3	
    4	int mygetline(char line[], int max);
    5	int strindex(char source[], char searchfor[]);
    6	
    7	char pattern[]="ould";
    8	
    9	int main()
    10	{

    命令list [文件名]:[行号], 列出对应文件的源代码:

    (gdb) l mygetlines.c:1
    1	#include <stdio.h>
    2	
    3	int mygetline(char s[], int lim)
    4	{
    5	    int c, i;
    6	    i=0;
    7	
    8	    while(--lim>0 && (c=getchar())!=EOF && c!='\n')
    9	    {
    10		s[i++]=c;
    

    加断点:

    break [行号]
    break [方法名]
    break [文件名]:[行号] 

    例如:

    输入break main

    (gdb) break main
    Breakpoint 1 at 0x8048470: file cpro1.c, line 10.
    (gdb) break strindex.c:2
    Breakpoint 3 at 0x80484f6: file strindex.c, line 2.
    

    查看断点:

    info break

    例如:

    (gdb) info break
    Num     Type           Disp Enb Address    What
    1       breakpoint     keep y   0x08048470 in main at cpro1.c:10

    好了,断点已经加好了,可以运行了:

    run [命令行参数]

    例如:

    (gdb) run
    Starting program: /home/peng1/Dropbox/CProgram/cpro1 
    
    Breakpoint 1, main () at cpro1.c:10
    10	{

    单步执行:

    step或s   单步执行,会跳入方法中
    next或n   单步执行,不会跳入方法中

    例如:

    (gdb) s
    12	    int found=0;
    (gdb) s
    14	    while(mygetline(line, MAXLINE)>0)
    (gdb) s
    mygetline (s=0xbfffeec4 "\001", lim=1000) at cpro1.c:29
    29	    i=0;
    (gdb) s
    31	    while(--lim>0 && (c=getchar())!=EOF && c!='\n')
    (gdb) s

     
    查看当前代码运行到的位置:

    where
    

     
    例如:

    (gdb) where
    #0  mygetline (s=0xbfffeec4 "\n", lim=999) at cpro1.c:39
    #1  0x080484cf in main () at cpro1.c:14
    

     
    显示变量的值:

    print [变量名]
    p [变量名]
    p [文件名]::[变量名]
    

    例如:

    (gdb) p c
    $1 = 10
    (gdb) p s
    $2 = 0xbfffeec4 "\n"
    

     
    继续执行到下一个断点:

    continue
    c
    

     
    退出GDB:

    quit
    q
  • 相关阅读:
    聊聊CMDB的前世今生
    我是如何走上运维岗位的?谈谈新人入职运维发展的注意事项
    如何从生命周期的视角看待应用运维体系建设?
    标准化体系建设(下):如何建立基础架构标准化及服务化体系?
    标准化体系建设(上):如何建立应用标准化体系和模型?
    微服务架构时代,运维体系建设为什么要以“应用”为核心?
    Kubernetes容器化工具Kind实践部署Kubernetes v1.18.x 版本, 发布WordPress和MySQL
    Etcd常用运维命令
    Logstash生产环境实践手册(含grok规则示例和ELKF应用场景)
    Netflix业务运维分析和总结
  • 原文地址:https://www.cnblogs.com/liupengblog/p/2678520.html
Copyright © 2011-2022 走看看