zoukankan      html  css  js  c++  java
  • gdb之小试牛刀

            在linux下编程的调试工具往往比较少,其中比较有名的就是gdb。而由于程序都是在ARM板子上跑,往往会由于资源不够,连gdb都无法运行。所以之前调试跟踪问题往往也只是用简单的printf来解决,都没怎么用过gdb。但是今天遇到了一个printf无法跟踪的问题,这时才想起来gdb。通过应用gdb,发现gdb功能真是强大,下面记录了一下我用到的命令。
    ./gdb testprogram   :表示用gdb去跑testprogram这个程序,由于我的gdb程序是在当前目录下,所以前面加了./ 如果gdb在系统环境变量的目录中(比如/bin)的话就直接运行gdb testprogram就行。ps:有时候在嵌入式环境下开发的时候经常会用gdb观察core文件,则运行指令则应该是在后面再加上core文件名,比如:./gdb testprogram core
    r                   :表示执行程序,是run的缩写,也可以输入run。如果程序中断后,再输入r的话,表示从头重新执行。
    ctrl + c          :这个不是输入命令,而是在程序运行过程中,通过这个组合键来实现即时的中断程序。
    bt n              :在程序被中断运行的情况下,显示程序压栈的情况。其实就是看依次调了那几个函数。n就是表示想要观察的调用层数。
    f n                :结合bt n使用,使程序状态返回到相应层数的函数作用域中。主要是为了便于观察局部变量。如果不到相应的函数调用层,是无法打印相应作用域的变量的。
    p x               :print的缩写,打印x变量的值,x可以是表达式。*以及&等都能用,非常强大。
    break linenum:设置断点。linenum表示行号。如果一个文件的话,直接写行号就行。如果多个文件的话,可以用文件名:行号的格式,比如break test.c:8 就表示在test.c的第8行设置断点。
    cont              :continue的缩写,在程序被中断后,输入此命令可使程序继续执行。
    next              :单步运行程序,遇到函数调用时,next会把该函数调用当作一条语句来执行。
    step              :单步运行程序,但是和next不同的是当遇到函数调用时,step会跟踪进入函数一次一条的执行函数内的代码。
    q                  :quit的缩写,表示退出gdb。  

  • 相关阅读:
    [hdu4631 Sad Love Story]最近点对,枚举
    [hdu4629 Burning]三角形面积并,扫描线
    [hdu4628 Pieces]二进制子状态,DP
    [hdu4627 The Unsolvable Problem]数论
    [hdu4622 Reincarnation]后缀数组
    [hdu5379 Mahjong tree]dfs计数
    [hdu5375 Gray code]DP
    决策树
    算法题解之位运算
    算法题解之滑动窗口
  • 原文地址:https://www.cnblogs.com/nightwatcher/p/2169249.html
Copyright © 2011-2022 走看看