当前位置:Gxlcms > 数据库问题 > 第一部分牛刀小试:启动GDB开始调试

第一部分牛刀小试:启动GDB开始调试

时间:2021-07-01 10:21:17 帮助过:16人阅读

  •   int main(int argc, char *argv[])
  •   {
  •   int i;
  •   for(i = 0; i < 60; i++)
  •   {
  •   sleep(1);
  •   }
  •   return 0;
  •   }

  • ------------------------------------------------------------------------

    1、编译并运行程序
    使用 ‘gcc -g eg2.c -o eg2‘ 编译该程序并使用 ‘./eg2 &‘ 运行该程序。请留意在启动该程序时在背景上打印的进程标识,在本例中是 1283:
    ------------------------------------------------------------------------
    ./eg2 &
    [3] 1283
    ------------------------------------------------------------------------

    2、发起连接
    连接到进程: ‘gdb [被调试文件] -c [进程号]‘ ,也可以不要 -c。
    启动 gdb 并指定进程标识,在我举的这个例子中是 ‘gdb eg2 1283‘。gdb 会查找一个叫作 "1283" 的 core 文件。如果没有找到,那么只要进程 1283 正在运行(在本例中可能在 sleep() 中),gdb 就会连接并中断该进程:
    ------------------------------------------------------------------------
    ...
    /home/seager/gdb/1283: No such file or directory.
    Attaching to program: /home/seager/gdb/eg2, Pid 1283
    ...
    0x400a87f1 in __libc_nanosleep () from /lib/libc.so.6
    (gdb)
    ------------------------------------------------------------------------

    3、gdb调试( gdb 命令或堆栈命令来查看调试信息)
    此时,可以发出所有常用 gdb 命令。可以使用 ‘backtrace‘ 来查看当前位置与 main() 的相对关系,以及 mian() 的帧号是什么,然后切换到 main() 所在的帧,查看已经在 "for" 循环中运行了多少次:
    ------------------------------------------------------------------------
    (gdb) backtrace
    #0 0x400a87f1 in __libc_nanosleep () from /lib/libc.so.6
    #1 0x400a877d in __sleep (seconds=1) at ../sysdeps/unix/sysv/linux/sleep.c:78
    #2 0x80483ef in main (argc=1, argv=0xbffff9c4) at eg2.c:7
    (gdb) frame 2
    #2 0x80483ef in main (argc=1, argv=0xbffff9c4) at eg2.c:7
    7 sleep(1);
    (gdb) print i
    $1 = 50
    ------------------------------------------------------------------------

    4、调试完、断开连接等
    detach / kill:输入‘detach‘ or ‘kill‘,不需要进程号。
    如果已经完成了对程序的修改,可以 ‘detach‘ 命令继续执行程序,或者 ‘kill‘ 命令杀死进程。
    attach:先输入‘file eg2‘,然后输入‘attach 1283‘
    还可以首先使用 ‘file eg2‘ 装入文件,然后发出 ‘attach 1283‘ 命令连接到进程标识 1283 下的 eg2。


    转自:http://blog.csdn.net/azr22005/article/details/6927420
             http://www.cppblog.com/BlueSky/archive/2007/11/20/37012.html
             http://hi.baidu.com/andrewhome/blog/item/bb90fadf09b43a1049540326.html

    第一部分牛刀小试:启动GDB开始调试

    标签:www   编译   source   一点   操作   rom   cto   .so   sel   

    人气教程排行