惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Cyberwarzone
Cyberwarzone
Hacker News: Ask HN
Hacker News: Ask HN
C
Cisco Blogs
NISL@THU
NISL@THU
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 热门话题
A
Arctic Wolf
Simon Willison's Weblog
Simon Willison's Weblog
S
Schneier on Security
P
Palo Alto Networks Blog
Know Your Adversary
Know Your Adversary
C
Cybersecurity and Infrastructure Security Agency CISA
G
GRAHAM CLULEY
K
Kaspersky official blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Vulnerabilities – Threatpost
小众软件
小众软件
博客园 - 司徒正美
腾讯CDC
AWS News Blog
AWS News Blog
Last Week in AI
Last Week in AI
T
Tenable Blog
I
Intezer
博客园_首页
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
AI
AI
V
V2EX
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园 - 三生石上(FineUI控件)
W
WeLiveSecurity
D
Docker
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Security Latest
Security Latest
F
Fortinet All Blogs
S
Secure Thoughts
T
Troy Hunt's Blog
T
The Blog of Author Tim Ferriss
Recorded Future
Recorded Future
M
MIT News - Artificial intelligence
GbyAI
GbyAI
Microsoft Security Blog
Microsoft Security Blog
L
LINUX DO - 最新话题
B
Blog RSS Feed
U
Unit 42
TaoSecurity Blog
TaoSecurity Blog

博客园 - ~大器晚成~

我的2012 一个非重点校计算机专业毕业生的求职之路 Vim设置 推荐系统的循序进阶读物(从入门到精通) Hadoop 常见错误汇总 (转载) 信息检索技术——向量空间模型 信息检索技术——布尔检索 排序算法——堆排序 查找算法——找到序列中第二大的数(修正版) Hadoop 实现多个数据表的join操作 排序算法——快速排序 排序算法——冒泡排序 排序算法——选择排序 牛×的可视化排序 shell常用技巧 排序算法——插入排序 机器学习相关——文本分类综述 大公司 or 小公司 使用gdb进行调试高级篇
使用gdb进行调试中级篇
~大器晚成~ · 2012-02-08 · via 博客园 - ~大器晚成~

  闲话少叙,经过上篇文章的铺垫后,咱们趁热打铁,继续学习。

  设置断点

  break <function> 在进入指定函数时停住。C++中可以使用class::function或function(type,type)格式来指定函数名。

  break <linenum> 在指定行号停住。

  break filename:linenum 在源文件filename的linenum行处停住

  break filename:function 在源文件filename的function函数的入口处停住

  break *address 在程序运行的内存地址处停住

  break if i=100 表示当i为100时停住程序

  info breakpoints(info break) 查看断点

  设置观察点(WatchPoint)

  观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点:

  watch <expr> 为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序

  rwatch <expr> 当表达式(变量)expr被读时,停住程序

  awatch <expr> 当表达式(变量)的值被读或被写时,停住程序

  info watchpoints 列出当前所设置了的所有观察点

  删除观察点或断点

  clear 清除所有设置在函数上的停止点

  clear <function> 清除所有设置在函数上的停止点

  delete [breakpoints] [range...] 删除指定的断点,breakpoints为断点号。如果不指定断点号,则表示删除所有的断点。range 表示断点号的范围(如:3-7)。其简写命令为d

  disable [breakpoints] [range...] disable所指定的停止点,breakpoints为停止点号。如果什么都不指定,表示disable所有的停止点。简写命令是dis.

  enable [breakpoints] [range...] enable所指定的停止点,breakpoints为停止点号。

  恢复程序运行和单步调试

  当程序被停住了,你可以用continue命令恢复程序的运行直到程序结束,或下一个断点到来。也可以使用step或next命令单步跟踪程序。

  continue (c)恢复程序运行,直到程序结束,或是下一个断点到来

  step <count> 单步跟踪,如果有函数调用,他会进入该函数.后面可以加count也可以不加,不加表示一条条地执行,加表示执行后面的count条指令,然后再停住。

  next <count> 同样单步跟踪,如果有函数调用,他不会进入该函数

  set step-mode on/off  打开/关闭step-mode模式,于是,在进行单步跟踪时,程序不会因为没有debug信息而不停住。这个参数有很利于查看机器码

  finish 运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息

  until 或 u 当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体.

  nexti 或 ni 单步跟踪一条机器指令!一条程序代码有可能由数条机器指令完成,stepi和nexti可以单步执行机器指令。与之一样有相同功能的命令是“display/i $pc” ,当运行完这个命令后,单步跟踪会在打出程序代码的同时打出机器指令(也就是汇编代码)

  查看栈信息

  当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息。

  backtrace 打印当前的函数调用栈的所有信息

  frame <n> 查看某一层的信息

  frame 会打印出这些信息:栈的层编号,当前的函数名,函数参数值,函数所在文件及行号,函数执行到的语句。

  info f  这个命令会打印出更为详细的当前栈层的信息,只不过,大多数都是运行时的内内地址。

  info args 打印出当前函数的参数名及其值

  info locals  打印出当前函数中所有局部变量及其值。

  info catch 打印出当前的函数中的异常处理信息。

  以上是关于gdb的一些使用说明,都很简单。下一次打算介绍一下如何查看运行过程中变量的值和内存地址,也就算是最常用的部分了,我姑且称之为高级篇,希望大家不要见笑。

  注:如果希望了解更多关于gdb的知识,请看http://blog.csdn.net/haoel/article/details/2879