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

gdb的疑问

    来源: 互联网  发布时间:2016-10-21

    本文导语:  代码片断如下 void InitCalcXorYx(USHORT *pCalcType,CALC_YX_FILE_XOR *pXorYx) {/*  功能:初始化异或遥信计算结构  参数:*pCalcType  OUT    参与计算遥信类型        *pXorYx     IN     异或计算遥信参数  返回:无  说...

代码片断如下

void InitCalcXorYx(USHORT *pCalcType,CALC_YX_FILE_XOR *pXorYx)
{/*
 功能:初始化异或遥信计算结构
 参数:*pCalcType  OUT    参与计算遥信类型
       *pXorYx     IN     异或计算遥信参数
 返回:无
 说明:无
 */
1151  USHORT i;
1152  USHORT recNum=0,dYxNum=0,cellNum=0,sYxNum=0;
1153  USHORT sYxIndex=0,sYxNo=0,dYxIndex=0,dYxNo=0;
1154  USHORT yxSysDot=0,firstRecNo=0;
1155
1156  cellNum = GetCellNumber();
1157  /*单元数大于最大单元数出错,使用断言*/
1158  dYxIndex = pXorYx->comm.dCellIndex;
1159  if( dYxIndex >= cellNum ) 
1160  {
1161   printf("calc Xor yx configure error :nyx index = %d,cell Num = %dn",dYxIndex,cellNum);
1162   return;
1163   }
1164
1165  for(i=0;icomm.dCellIndex;
(gdb) print dYxIndex
$1 = 
(gdb) print cellNum
$2 = 
(gdb) next
1162                            return;
(gdb) next
1159            if( dYxIndex >= cellNum )
(gdb) print dYxIndex
$3 = 6
(gdb) print cellNum
$4 = 
(gdb) next
1156            cellNum = GetCellNumber();
(gdb)
1159            if( dYxIndex >= cellNum )
(gdb) print cellNum
$5 = 10
(gdb) print dYxIndex
$6 = 6


有几处疑问:(gdb)
问题1:对GetCellNumber()的调用怎么会是两次。

1156            cellNum = GetCellNumber();
(gdb)
GetCellNumber () at database.c:981
981     {
(gdb)
993     }
(gdb)
GetCellNumber () at database.c:981
981     {
(gdb)
993     }

问题2:为什么不能查看这两个变量的值,value optimized out是什么意思?

(gdb) print dYxIndex
$1 = 
(gdb) print cellNum
$2 = 

问题3:单步执行为什么会执行到1162行,为什么整个函数没有返回,而是又返回到1159行重新执行,之后又返回到1156行重新执行,并且最后执行成功。

(gdb) next
1162                            return;
(gdb) next
1159            if( dYxIndex >= cellNum )
(gdb) print dYxIndex
$3 = 6
(gdb) print cellNum
$4 = 
(gdb) next
1156            cellNum = GetCellNumber();
(gdb)
1159            if( dYxIndex >= cellNum )



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/apn172/archive/2010/11/29/6043624.aspx

|
从现象来看,编译的时候好像是有优化。
LZ检查一下编译命令行的选项吧,不要用-O,而且一定要用-g

|
调用多少次它怎么知道。这个主要是用来跟踪调试的

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












  • 相关文章推荐
  • 如何使用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