精华内容
下载资源
问答
  • Linux gdb 调试

    2016-04-14 21:36:30
    linux gdb调试

    gdb 是一个在 UNIX 环境下的命令行调试工具。gdb 主要有以下几个功能:

    • 启动程序,可以按照你的自定义的要求运行程序。
    • 可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
    • 当程序被停住时,可以检查此时你的程序中所发生的事。
    • 动态的改变你程序的执行环境

    gdb 常用命令

    程序运行:


    断点设置:

    显示命令

    在使用print命令时,可以对变量按指定格式进行输出,其命令格式为:print 变量名 格式

    其中常用的变量格式:x:十六进制;d:十进制;u:无符号数;o:八进制;c:字符格式;f:浮点数。

    在调试程序时,可以改变程序变量的值:set s=xgf

    以下面几个函数为例,简单介绍 gdb 的使用:

    // main.c
    #include "test.h"
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        string s(argv[1]);
        cout << s << endl;
        test(s);
        return 1;
    }

    // test.h
    #include <string>
    #include <iostream>
    
    using namespace std;
    void test( string s );

    // test.c
    #include "test.h"
    void test(string s)
    {
        cout << "hello," << s << endl;
        cout << "bye" ;
    }

    断点、参数设置与显示


    执行调试


    带参数程序

    set args 可指定运行时参数,如:set args 10 20 30 

    show args 命令可以查看设置好的运行参数 

    调试已运行的程序

    • 用 ps 查看正在运行的程序的PID(进程ID),然后用 gdb PID 格式挂接正在运行的程序; 
    • 先用 gdb 关联上源代码,并进行gdb,在gdb中用 attach 命令来挂接进程的PID,并用 detach 来取消挂接的进程。
    展开全文
  • Linux GDB调试C语言

    2019-07-26 16:29:44
    Linux GDB调试C语言 1. 安装gdb 一般的服务器版本linux没有自带gdb,需要自行安装。已经安装直接跳第二节 sudo apt-get update sudo apt-get install gdb 2. 使用gdb调试 启用gdb调试工具gdb [调试程序名]。如:...

    Linux GDB调试C语言

    1. 安装gdb

    一般的服务器版本linux没有自带gdb,需要自行安装。已经安装直接跳第二节

    sudo apt-get update
    sudo apt-get install gdb
    

    2. 使用gdb调试

    启用gdb调试工具gdb [调试程序名]。如:gdb swap

    调试方法

    • 查看源码list [行号]l [行号]。行号为开始查看的行号

    • 设置断点break [行号]。如:break 5

      查看断点信息info breaki b

    • 调试运行runr

    • 单步运行nextn

    • 连续运行直到下一个断点或者程序结束continuec

    • 查看变量值print [变量名]p [变量名]

    • 终止调试quitq

    gdb基本命令表

    命令 解释 简写
    list 列出装入的源代码的一部分 l
    next 执行一行源代码;进入函数内部 n
    step 执行一行源代码;不进入(跳过)函数内部 s
    run 执行当前被调试的程序 r
    continue 继续执行程序 c
    quit 终止gdb q
    print 输出指定变量的当前值 p
    break 设置断点 b
    info break 查看断点信息 i b
    delete 删除设置的断点 d
    watch 监视一个变量值,一旦值发生变化,程序停住 wa
    help gdb帮助命令 h

    参考

    linux下如何用GDB调试c++程序
    Linux系统下调试 C语言程序(使用gdb)

    展开全文
  • linux gdb 调试

    千次阅读 2015-09-16 11:37:30
    1.查看系统信息 # uname -a Linux (none) 3.0.8 #20 Thu Mar 5 00:55:14 PST 2015 armv5tejl GNU/Linux 2.查看系统限制参数信息 # ulimit -a time(seconds) unlimited file(blocks) unlimited data(kb

    1.查看系统信息

    # uname -a

    Linux (none) 3.0.8 #20 Thu Mar 5 00:55:14 PST 2015 armv5tejl GNU/Linux


    根文件系统配置必需加载 gdb 模块:

    goke根文件系统配置加载 gdb模块:

    通过文件系统配置文件rootfs.maksoftware/linux/rootfs/rootfs.mak)可以选择性安装根文
    件系统所需要的组件

    如果需要安装gdb,则做如下设置:
    ############################################################################
    # --gdb
    ############################################################################
    GDB_7_5_1_SUPPORT := 1
    GDB_7_5_1_DEPEND := ZLIB_1_2_7_SUPPORT NCURSES_5_9_SUPPORT
    这样在安装根文件系统的时候就会将 gdb 以及它所依赖的 zlib ncurses 组件一并装入新建的根文件系统。

    2.查看系统限制参数信息

    # ulimit -a
    time(seconds)        unlimited
    file(blocks)         unlimited
    data(kb)             unlimited
    stack(kb)            8192
    coredump(blocks)     unlimited
    memory(kb)           unlimited
    locked memory(kb)    64
    process              219
    nofiles              1024
    vmemory(kb)          unlimited
    locks                unlimited


    修改coredump生成文件大小的指令:ulimit -c 1024(-c是ubuntu上显示的,操作coredump对应的代号)

    ulimit -c unlimited


    3.在宿主目录下修改.bashrc配置文件中添加 ulimit -c unlimited ,修改完.bashrc文件后运行. .bashrc让文件修改生效


    4.写错误程序并编译

    #include <stdio.h>

    void testfun()
    {
            int *f = NULL;
            *f = 2;
    }

    int main()
    {
            printf("hello word!\n");
            testfun();
            return 0;
    }


    编译执行:

    $ gcc -o test -g gdbtest.c

    $ ./test

    $ ls -l core 

    -rw------- 1 zhancj zhancj 155648 2015-09-16 10:51 core


    5.gdb调试

    $ gdb -q test core
    Reading symbols from /home/zhancj/unix_program/gdbtest/test...done.
    [New Thread 1812]


    warning: Can't read pathname for load map: Input/output error.
    Reading symbols from /lib/tls/i686/cmov/libc.so.6...(no debugging symbols found)...done.
    Loaded symbols for /lib/tls/i686/cmov/libc.so.6
    Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done.
    Loaded symbols for /lib/ld-linux.so.2
    Core was generated by `./test'.
    Program terminated with signal 11, Segmentation fault.
    #0  0x080483f4 in testfun () at gdbtest.c:6
    6 *f = 2;
    (gdb) where //哪里出错
    #0  0x080483f4 in testfun () at gdbtest.c:6

    #1  0x08048416 in main () at gdbtest.c:12

    (gdb) file ./test //GDB读取执行文件符号信息
    Reading symbols from /home/zhancj/unix_program/gdbtest/test...done.
    (gdb) bt //backtrace查看调用栈出错的地方
    #0  0x080483f4 in testfun () at gdbtest.c:6
    #1  0x08048416 in main () at gdbtest.c:12

    (gdb) l//查看程序执行错误的地方
    2
    3 void testfun()
    4 {
    5 int *f = NULL;
    6 *f = 2;
    7 }
    8
    9 int main()
    10 {
    11 printf("hello word!\n");//下一行执行代码,出现错误

    (gdb) b testfun//在testfun函数调用时设置断点
    Breakpoint 1 at 0x80483ea: file gdbtest.c, line 5.
    (gdb) run //运行
    Starting program: /home/zhancj/unix_program/gdbtest/test 
    hello word!


    Breakpoint 1, testfun () at gdbtest.c:5
    5 int *f = NULL;
    (gdb) n //单步
    6 *f = 2;
    (gdb) n//单步


    Program received signal SIGSEGV, Segmentation fault.
    0x080483f4 in testfun () at gdbtest.c:6
    6 *f = 2;
    (gdb) n//单步


    Program terminated with signal SIGSEGV, Segmentation fault.
    The program no longer exists.
    (gdb) q //退出调试
    /build/buildd/gdb-7.1/gdb/inferior.c:353: internal-error: find_inferior_pid: Assertion `pid != 0' failed.
    A problem internal to GDB has been detected,
    further debugging may prove unreliable.
    Quit this debugging session? (y or n) y
    /build/buildd/gdb-7.1/gdb/inferior.c:353: internal-error: find_inferior_pid: Assertion `pid != 0' failed.
    A problem internal to GDB has been detected,
    further debugging may prove unreliable.
    Create a core file of GDB? (y or n) y
    Aborted (core dumped)



    编译文件时需要注意:

    1.编译项加-g:

    $(CC) -g -c device.c -o $(OBJSPATH)/device.o $(CFlLAGS)


    2.关闭arm-goke-linux-uclibcgnueabi-strip debug/ec_ipc_goke

    # IPCAM
    arm-goke-linux-uclibcgnueabi-g++ $(CFLAGS) $(OBJSPATH)/*.o -o $(OBJSPATH)/ec_ipc_goke $(LDFLAGS)
    # arm-goke-linux-uclibcgnueabi-strip debug/ec_ipc_goke




    展开全文
  • Linux GDB调试

    2013-11-23 19:10:35
    熟悉了windows环境下编程 习惯用图形化的调试工具、当从windows平台转向Linux平台、首先遇到的一个问题就是当程序出错、怎么快速解决bug呢?因为Linux平台没有像windows平台下的vc、vs图像化的调试工具!下面来学习一...

            熟悉了windows环境下编程 习惯用图形化的调试工具、当从windows平台转向Linux平台、首先遇到的一个问题就是当程序出错、怎么快速解决bug呢?因为Linux平台没有像windows平台下的vc、vs图像化的调试工具!下面来学习一个Linux平台的GDB工具。

    下面通过例子来说明:

    1编译命令:gcc -g -o main main.c

    2执行 gdb main 装载main调试程序

    3设置断点:

    通过break filename:linenum 在设置断点前 可以通过list命令查看代码

    设置断点

    查询断点信息

    开始执行程序run

    continue 继续执行到下一个断点 若无其它断点 则结束程序 
    step     会进入到函数内部
    next     一次执行 并跳过函数

         

    x/FMT ADDRESS

    查看x命令的用法 查看man手册

    x/32xb &b 

    第二位显示的进制【八进制、十六进制等】

    最后一位是几个字节b[一个字节] h[二个字节] w[四个字节]g[八个字节]

    第一个是显示多少个b[b、h、w、g]

    取消断点 delete/d  [info b]

    退出调试...quit/q

    展开全文
  • Linux GDB 调试指南

    千次阅读 2019-07-02 03:04:23
    调试是程序开发和排障很重要的一个环节,对于从事 Linux C/C++ 后台开发的读者来说,GDB 调试是需要熟练掌握的一项技能。 有些读者可能想学习像 Redis、Apache Web Server、Nginx 等以 C/C++ 为主要开发语言...
  • Linux gdb调试器用法全面解析

    万次阅读 多人点赞 2012-03-22 22:18:58
    GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序。 让被调试的程序在工程师指定的断点处停住,断点...
  • Linux gdb调试多线程

    千次阅读 2013-08-03 09:03:09
    linux gdb 调试多线程 单独调试线程 http://coolshell.cn/articles/3643.html 一、多线程调试 多线程调试可能是问得最多的。其实,重要就是下面几个命令: info thread 查看当前进程的线程。 thread...
  • Linux gdb调试如何print变量的地址

    千次阅读 2019-06-18 15:32:30
    Linux gdb调试如何print变量的地址 其实也没有啥别的,但是网络上很多的帖子都文不对题,这里自己调试了几遍发现其实只要按照c语言编程的思路把变量前面加上一个取地址符,就可以输出相应的地址了,和你print的格式...
  • linux gdb 调试多线程 单独调试线程

    千次阅读 2011-09-10 14:01:45
    linux gdb 调试多线程 单独调试线程 2011年01月26日 星期三 下午 06:10 http://coolshell.cn/articles/3643.html 一、多线程调试 多线程调试可能是问得最多的。其实,重要就是下面几个命令:
  • Linux gdb调试多进程

    千次阅读 2018-05-14 23:20:17
    gdbgdb是Linux下的调试工具,如果需要调试,... gdb a.out ——— a.out为可已经编译好的可执行文件(当然如果存在语法错误是肯定不能进入gdb调试的)。 list/l 行号 ——- 显示源代码,从指定行号处开始显示,每...
  • Linux GDB调试常见指令

    2020-12-28 16:48:01
    catch 设置捕捉点来补捉程序运行时的一些事件 show disassembly-flavor gdb默认反汇编为att格式的指令 set disassembly-flavor intel 将反汇编格式设置为NASM 使用qemu + gdb 调试Linux内核时发现,并不是内核所有的...
  • Linux GDB调试完全教程

    万次阅读 2016-11-10 14:57:50
    本文将主要介绍linux下的强大调试工具是怎么完成这些工作的。 之所以要调试程序,是因为程序的运行结果和预期结果不一致,或者程序出现运行时错误。  调试的基本思想是:  分析现象 -> 假设错误原因 -> 产生...
  • Linux gdb调试打印完整字符串

    万次阅读 2018-08-24 16:04:24
    在使用gdb调试过程中,经常需要查看变量的值,最常用的方法: (gdb) print {变量名} 一般情况下,打印并不存在问题。但当一个字符串比较长时,打印出来的内容不完整,内容的最后为"..." 例如: 可以...
  • Linux gdb 调试 openssl

    千次阅读 2016-09-30 17:13:27
    一 、获取openssl 从官网上下载openssl,现在openssl项目组把openssl源码都放在github网站上托管。openssl源码地址:...我自己调试用版本是 openssl-OpenSSL_1_0_1c。 二、编译openssl
  • linux gdb调试基本命令

    千次阅读 2016-12-31 22:47:30
    Gdb调试 注意:在Gcc编译选项中一定要加入 –g gcc -g -o debug debug.c 1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。 gdb ...
  • linux gdb 调试技巧

    2013-11-23 23:48:02
    首先 生成gdb调试的二进制文件: gdb -g -O0 -o test test.c ,-O0关闭编译时代码优化,防止list的时候代码的行数变动。 然后 gdb test 就可以对程序进行调试运行了 gdb 提供的命令如下:  l(list) ->打印出二进制...
  • Linux gdb调试及后台程序问题

    千次阅读 2016-01-08 11:24:35
    昨天下午遇到一个gdb调试的问题:打上断点以后,断点停不住。报错:During startup program exited normally. 然后开始找茬gdb,找了一圈没找到问题原因。今天上午调试发现传递的参数中有一个“&”,这个符号让程序...
  • Linux Gdb调试初步

    千次阅读 2011-11-30 14:38:10
    Gdb是一款GNU开发组织并发布的程序调试工具。 以下通过一个具体的例子来讲述Gdb将如何调试一个程序: 写一个test.c的程序: #include void sum(int) ; int main(){ int i,n=0; sum(50) ; for( i=1 ; i; ++i){ ...
  • 以前的时候,有过在Window下调试过java的经历,不过只是...1.在使用GDB调试时,编译命令需要加入-g选项,产生test。 gcc -o test source.c -g//产生test 2.调试加载程序test gdb test 进入gdb后,也可以使用
  • linux gdb调试core文件

    千次阅读 2012-07-24 17:09:54
    Linux dev 2.4.21-9.30AXsmp #1 SMP Wed May 26 23:37:09 EDT 2004 i686 i686 i386 GNU/Linux 再看看默认的一些参数,注意core file size是个0,程序出错时不会产生core文件了。 $ ulimit -a core file size ...
  • linux GDB 调试多线程

    千次阅读 2011-03-29 16:18:00
    gdb提供了以下供调试多线程的进程的功能: * 自动通告新线程。 * / "thread THREADNO/ ",一个用来在线程之间切换的命令。 * / "info threads/ ",一个用来查询现存线程的命令。 * /...
  • linux gdb 调试多线程 多进程 显示宏

    千次阅读 2013-07-02 11:38:11
    一、gdb调试多线程 gdb)info thread 查看当前进程的线程。  gdb)thread 切换调试的线程为指定ID的线程。  gdb)break file.c:100 thread all 在file.c文件第100行处为所有经过这里的线程设置断点。 gdb)set ...
  • 今天调试遇到了个很麻烦的事情,为了复现一个栈完全被踩成0x01010101010101010101的问题较劲了好几天 期间需要多次call 函数来模拟进程里的函数调用 但是坑爹的是,这个read_xxx(int, int, int*) 有个坑爹的指针 ...
  • linux gdb调试动态库(so)的方法

    万次阅读 2015-03-04 15:48:36
    原文地址: http://www.gonwan.com/?tag=gdb ...编译libcurl.so.4的可调试版本: # sudo apt-get source libcurl3-dbg # cd curl-7.19.7/ # ./configure --prefix=/usr/local --enable-debug --
  •  google key: gdb问号 ... 我的程序crash,有了coredump文件,在Linux PC上用arm-linux-gdb debug it. The result is: #0 0x4022b178 in ?? () (gdb) bt ...
  • 在确认编译的代码和编辑器中的代码一致的情况下,调试过程中出现next走向跳过了一些代码,加断点也不进入。 最终找到原因: int ReadOppositeKey(string& key), 将上面的方法错误的调用成 string key =...
  • 1.简介 GNU 的调试器称为 gdb,该程序是一个交互式工具,工作在字符模式。在 X Window 系统中,有一个 gdb 的前端图形工具,称为 xxgdb。 gdb 是功能强大的调试程序,可完成如下的调试任务: * 设置断点; * 监视...
  • linux gdb调试工具简介【一】

    千次阅读 2006-12-05 08:49:00
    List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符()和外壳通配符(*、?、[、])在内。 如果你使用不带...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,475
精华内容 22,190
关键字:

linuxgdb调试

linux 订阅