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

关于gdb查看结构体出现的问题

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

    本文导语:  #include   struct NewStruct  {      unsigned char a;      unsigned char b;  };  int main()  {      char tmp[2];      char *tmp_p = tmp;      ((struct NewStruct *)tmp_p)->a = 1;      printf("a = %dn", ((struct NewStruct *)tmp_p)-...

#include  

struct NewStruct 

    unsigned char a; 
    unsigned char b; 
}; 

int main() 

    char tmp[2]; 
    char *tmp_p = tmp; 
    ((struct NewStruct *)tmp_p)->a = 1; 
    printf("a = %dn", ((struct NewStruct *)tmp_p)->a); 

    return 1; 


运行到      printf("a = %dn", ((struct NewStruct *)tmp_p)->a);  这一行时 
用 p ((struct NewStruct *)tmp_p)->a 
出来的错误是 
no struct type named NewStruct 

请注意程序是运行成功的,只是在gdb进行调试的时候看不到具体的值。
如果是以字节一个一个来看的话是可以看到, 

例如 

p *tmp 
p *(tmp + 1) 

这样两个值都能看到而且还可以更改, 
但是如果结构体里面是bit的话,就没办法了

有没有高手帮忙啊


|
增加编译选项-fno-eliminate-unused-debug-types

|
两种奇怪的现象:搂主的代码问题如下:

3       struct NewStruct
4       {
5           unsigned char a;
6           unsigned char b;
7       };
8
9       int main()
10      {
11          char tmp[2];
12          char *tmp_p = tmp;
(gdb) 
13      //struct NewStruct * p = tmp;
14          ((struct NewStruct *)tmp_p)->a = 1;
15          printf("a = %dn", ((struct NewStruct *)tmp_p)->a);
16
17          return 1;
18      } 
(gdb) b 15
Breakpoint 1 at 0x80483e1: file demo.c, line 15.
(gdb) p ((struct NewStruct *)tmp_p)->a 
No struct type named NewStruct.
(gdb) 

注意:解开第十三行,重新编译:
3       struct NewStruct
4       {
5           unsigned char a;
6           unsigned char b;
7       };
8
9       int main()
10      {
11          char tmp[2];
12          char *tmp_p = tmp;
(gdb) list
13      struct NewStruct * p = tmp;
14          ((struct NewStruct *)tmp_p)->a = 1;
15          printf("a = %dn", ((struct NewStruct *)tmp_p)->a);
16
17          return 1;
18      } 
(gdb) b 15
Breakpoint 1 at 0x80483e7: file demo.c, line 15.
(gdb) r
Starting program: /root/demo 
Missing separate debuginfo for /lib/ld-linux.so.2
Try: yum --enablerepo='*-debuginfo' install /usr/lib/debug/.build-id/ac/2eeb206486bb7315d6ac4cd64de0cb50838ff6.debug
Missing separate debuginfo for /lib/libc.so.6
Try: yum --enablerepo='*-debuginfo' install /usr/lib/debug/.build-id/ba/4ea1118691c826426e9410cafb798f25cefad5.debug

Breakpoint 1, main () at demo.c:15
15          printf("a = %dn", ((struct NewStruct *)tmp_p)->a);
(gdb) p ((struct NewStruct *)tmp_p)->a
$1 = 1 '01'
(gdb) 

两次结果不一样,应该是gdb对于强制类型转换问题的处理方式不同而已。gdb的版本:
 gdb -v
GNU gdb Red Hat Linux (6.6-43.fc8rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu".


    
 
 

您可能感兴趣的文章:

  • 请教 make gdb-6.4 出现 make[4]: Entering directory `/tmp/gdb-6.4/gdb/doc'
  • 新用linux的GDB, 版本是出现6.3.3.0,出现奇怪问题, 可能是环境设置的问题, 大人帮忙
  • linux 下用gdb调试器出现问题
  • GDB出现no debugging symbols found
  • 使用gdb时为什么调用list不出现代码
  • 为什么gdb出现警告?
  • gdb调试出现奇怪问题 , 怎么老围着 init.c 转? list , break 命令失效?!
  • busybox中的gzip运行过程中出现page fault错误,并指出出错的指针,但是怎么使用gdb调试,找到指针对应的语句?
  • 关于在linux gdb调试出现的段错误 无法具体定位
  • GDB调试线程,退出时老是出现异常
  • GDB调试linux内核出现问题
  • gdb调试出现No such file or directory错误 百思不得其解 急求仁兄帮忙!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求教 关于gdb如何查看lib中的表达式
  • GDB 在调试时如何查看内存?
  • gdb使用list时,如何指定要查看的文件
  • gdb调试过程中怎样查看Unicode型变量?
  • 如何使用linux下gdb来调试python程序
  • 使用gcc gdb的大牛进来说说gdb的强大之处在哪。我刚学linux了,vim我确实体会到了其强大之处。而对gcc gdb,体会不到gdb这工具的强大之处。
  • 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可以调试,把程序放到另外一台机器上调试,调试信息就没有了 这是什么原因呢? iis7站长之家
  • gdb调试
  • Linux下gdb如何追踪进入子进程??急急7777777777777
  • 如何编译gdb
  • 怎样在windows中编译生成gdb
  • gdb调试时的文件格式问题


  • 站内导航:


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

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

    浙ICP备11055608号-3