• linux下gdb调试


    gdb是Linux操作系统下基于命令行的程序调试工具。

    以C++为例,测试程序为test.cpp,通过makefile或者命令gcc生成可执行文件test:

    //-g为了调试用的 ,加个-g 是为了gdb 用,不然gdb用不到
    //-o output_filename,确定输出文件的名称为output_filename,不能和源文件同名
    //-c 只编译不链接,生成目标文件而不是可执行文件
    gcc -g test.cpp -o test
    

    启动gdb:

    gdb test//不打印gdb版本信息
    gdb -q test//打印gdb版本信息
    

      

    查看代码:l(list),默认显示10行,按回车键继续查看;

    运行程序:r(run),运行程序直到结束或遇到断点

            c(continue),继续执行程序,直到下一个断点或者结束

    设置断点:b(break) xxx,在第xxx行设置断点

         delete n:删除断点编号为n的断点

         info breakpoints,显示断点信息

    (gdb) info breakpoints
    //Num:断点编号
    //Disp:断点执行一次之后是否有效 kep:有效 dis:无效
    //Enb: 当前断点是否有效 y:有效 n:无效
    //Address:内存地址
    //What:位置
    Num     Type           Disp   Enb   Address               What
    1       breakpoint     keep   y     0x00000000004030d0    in main(int, char**) at test.cpp:62
    

      

    单步执行:n(next),单步执行程序,但是遇到函数时不进入函数
            s(step),单步执行程序,但是遇到函数会进入函数
        

    退出gdb:q(quit),退出gdb调试 

    查看运行信息:info program,来查看程序的是否在运行

              bt,显示当前运行的堆栈列表

           set args xxx,指定运行时的参数为xxx

           show args:查看设置好的参数

    多进程/多线程调试:attach pid,将PID为pid的进程附加到gdb调试器上(调试该进程)

              info threads,显示当前可以调试的所有线程

              thread id,调试ID为id的线程

    参考链接 linux下gdb调试方法与技巧整理_niyaozuozuihao的博客-CSDN博客_gdb调试

  • 相关阅读:
    【转载】搜索题目推荐
    HDU 4629 Burning 几何 + 扫描线
    HDU 4630 No Pain No Game 树状数组+离线查询
    SPOJ 416 Divisibility by 15 细节题
    【转载】树状数组题目
    SPOJ 274 Johnny and the Watermelon Plantation(TLE)
    SPOJ 227 Ordering the Soldiers 线段树 / 树状数组
    HDU 4620 Fruit Ninja Extreme 搜索
    Java序列化与反序列化
    Java IO包装流如何关闭?
  • 原文地址:https://www.cnblogs.com/yongjin-hou/p/15077058.html
Copyright © 2020-2023  润新知