当前位置:  技术问答>linux和unix

gdb下如何打印bool变量的 value ? 谢谢

    来源: 互联网  发布时间:2016-06-03

    本文导语:  假设有结构体 info struct info{     int age;     bool isgood; }; 当前断点有变量 info in; 如何打印in.isgood  ?? 谢谢 | info locals | gdb对断点的处理 (1) 断点功能的实现就是...

假设有结构体 info

struct info{
    int age;
    bool isgood;
};

当前断点有变量 info in;
如何打印in.isgood  ??

谢谢

|
info locals

|
gdb对断点的处理 (1)
断点功能的实现就是在指定位置插入断点指令,使目标程序运行至该处时产生SIGTRAP信号,该信号被gdb捕获,通过断点地址的匹配确定是否命中断点。

断点的属性:
是否有条件(由condition命令修改);
是否有忽略次数 (由ignore命令修改);
是否只针对某个线程有效(由break命令的thread参数指定);
是否是临时断点(由tbreak命令插入)。

gdb对断点的处理 (2)
断点命中的判定:目标程序遇到断点,并不一定就需要停下来,该停就停,不该停的还是要继续跑。只有真正需要停止运行的情况才认为是断点命中。是否命中断点的判定因素主要有以下这些:
导致目标程序本次停止运行的信号是不是SIGTRAP;
在gdb维护的断点链表中是否存在一个断点的地址与目标程序本次停止位置匹配;
若断点存在条件,此时条件是否满足;
断点的忽略次数此时是否为0;
若断点只针对某个线程有效,那么遇到该断点的线程是否就是断点所设定的线程;
若前两个条件之一不满足,则认为目标程序本次是因随机信号而停止。若后三个条件之一不满足,则认为目标程序本次没有命中断点,gdb会让其继续运行。

gdb对断点的处理 (3)
临时断点 – 断点命中之后的处理。当判定为断点命中之后,若该断点为临时断点,gdb就会将这个断点删除。也就是说,临时断点只命中一次。可能用到临时断点的场合:
用户通过tbreak命令显式插入;
next、nexti、step命令需要跨越函数调用的时候,由gdb自动在函数返回地址处插入临时断点;
finish命令需要在当前函数返回地址处插入临时断点;
带参数的until命令需要在当前函数返回地址以及参数指定地址插入临时断点;
在不支持硬件单步的架构上,gdb需要逐指令插入临时断点来实现软件单步;

gdb对断点的处理 (4)
gdb将断点实际插入目标程序的时机:当用户通过break命令设置一个断点时,这个断点并不会立即生效,因为gdb此时只是在内部的断点链表中为这个断点新创建了一个节点而已。gdb会在用户下次发出继续目标程序运行的命令时,将所有断点插入目标程序,新设置的断点到这个时候才会实际存在于目标程序中。与此相呼应,当目标程序停止时,gdb会将所有断点暂时从目标程序中清除。
断点命中失败的情况下,跨越断点继续运行的过程:
清除断点
单步到断点的下一条指令
恢复断点
继续目标程序运行

|
[root][~]# g++ -g -o cpptest cpptest.cpp fun.cpp
[root][~]# gdb -q cpptest
(gdb) l
1       #include "fun.h"
2
3       #include 
4       using namespace std;
5
6
7       int main(){
8
9               int j = 12;
10
(gdb)
11              for( int i=0; i

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教: gdb中能否打印内存中某个位(或某些位)的值???
  • linux下 多线程打印输出看不到,但gdb下就能看到输出,是什么原因呢?
  • gdb for循环无法打印
  • GDB 打印的堆栈信息只有malloc_consolidate () 看不见别的,请指教!
  • 如何使用linux下gdb来调试python程序
  • 使用gcc gdb的大牛进来说说gdb的强大之处在哪。我刚学linux了,vim我确实体会到了其强大之处。而对gcc gdb,体会不到gdb这工具的强大之处。
  • 请教 make gdb-6.4 出现 make[4]: Entering directory `/tmp/gdb-6.4/gdb/doc'
  • GDB调试 GDB挂了。。。
  • gdb 如何调试带命令行参数的程序 如 gdb a.out arg1,arg2
  • 请问gdb是不是只能调试gcc编译的程序,在unix下用其它编译器编译的程序是不是不一定能用gdb调试的?
  • gdb调试时命令行参数如何输入?比如main(int argc,char **argv)中,我要把一个filename作为argv[1]传入给gdb调试
  • linux gdb: 我在一台机器上编译的程序用GDB可以调试,把程序放到另外一台机器上调试,调试信息就没有了 这是什么原因呢?
  • 写调试器(像gdb)的一般思路是什么
  • gdb 使用问题请教
  • gdb的问题,请教,会者不难,快来拿分
  • gdb调试动态链接库
  • 在rh9上无法使用gdb是怎么回事呢
  • gdb高手请指教
  • gdb如何进行调试?
  • 请问,有人研究过gdb-insight源码吗?
  • 在linux下除了gdb外还有没其他好用的调试器?
  • gdb调试
  • Linux下gdb如何追踪进入子进程??急急7777777777777
  • 如何编译gdb
  • 怎样在windows中编译生成gdb


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3