调试器GDB

问题解决:GDBCan't find member of namespace, class, struct, or union named

1。首先确认打开了调试开关 -g

2。shell command$   gdb 可执行文件名 

     进入gdb中,然后list即可

     list 54  显示文件中的54

3。当我们用gdb调试时,然后list 开始显示的是main.cpp的代码,而看不到调用程序xxx.cpp的代码,如何才能看到呢?很简单,在xxx.cpp的某一行设置断点,然后程序运行到该行时,按s 就是step意思,这样程序就进入了xxx.cpp的代码了


4。info stack 类似于命令 where

或者:
backtrace
bt
打印当前的函数调用栈的所有信息。如:

frame # 查看当前堆栈帧,还可显示当前代码

或者

info frame  # 获取当前堆栈帧更详细的信息

5、强制函数返回
如果你的调试断点在某个函数中,并还有语句没有执行完。你可以使用return命令强制函数忽略还没有执行的语句并返
回。
return
return <expression>
使用return命令取消当前函数的执行,并立即返回,如果指定了<expression>,那么该表达式的值会被认作函数的返回
值。

6、跳转执行
一般来说,被调试程序会按照程序代码的运行顺序依次执行。GDB提供了乱序执行的功能,也就是说,GDB可以修改程序
的执行顺序,可以让程序执行随意跳跃。这个功能可以由GDB的jump命令来完:
jump <linespec>
指定下一条语句的运行点。<linespce>可以是文件的行号,可以是file:line格式,可以是+num这种偏移量格式。表式着
下一条运行语句从哪里开始。
jump <address>
这里的<address>是代码行的内存地址。
注意,jump命令不会改变当前的程序栈中的内容,所以,当你从一个函数跳到另一个函数时,当函数运行完返回时进行
弹栈操作时必然会发生错误,可能结果还是非常奇怪的,甚至于产生程序Core Dump。所以最好是同一个函数中进行跳
转。
熟悉汇编的人都知道,程序运行时,有一个寄存器用于保存当前代码所在的内存地址。所以,jump命令也就是改变了这
个寄存器中的值。于是,你可以使用“set $pc”来更改跳转执行的地址。如:
set $pc = 0x485

7、产生信号量
使用singal命令,可以产生一个信号量给被调试的程序。如:中断信号Ctrl+C。这非常方便于程序的调试,可以在程序
运行的任意位置设置断点,并在该断点用GDB产生一个信号量,这种精确地在某处产生信号非常有利程序的调试。
语法是:signal <singal>,UNIX的系统信号量通常从1到15。所以<singal>取值也在这个范围。
single命令和shell的kill命令不同,系统的kill命令发信号给被调试程序时,是由GDB截获的,而single命令所发出一
信号则是直接发给被调试程序的。

8、显示变量的类型(gdb)whatis width
                                                   type = double

9、设置变量的大小(gdb)set var width=47

链接参考:http://blog.csdn.net/cybertan/article/details/6219574


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值