有关linux gdb 调试问题! 高手帮忙 No symbol "*" in current context

gaoxianfeng 2003-04-10 11:36:58
各位好
请教一个问题
问题描述如下:
在linux环境下,我作了一个小程序,makefile文件是使用工具自动生成的,编译选项用了-g 但是当调试的时候却出了问题,gdb -> file filename-> p variable2
结果出现No symbol "variable2" in current context。的错误。
可是在添加variable2之前,曾经定义过另外一个变量variable1
当调试时却没有出现上面的问题!
请赐教
如言不达意 希望提出我没表述明白的地方。
谢谢
...全文
2872 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
updatedb 2003-04-18
  • 打赏
  • 举报
回复
-ggdb3,我一直用这个参数,从来都没有出过错,我想不出你是那儿错了
bnwxf 2003-04-18
  • 打赏
  • 举报
回复
找一份gdb文档吧,里面有看汇编的内容。
大概就是你先指定一个c程序行号,然后gdb给你反汇编出来。
gaoxianfeng 2003-04-17
  • 打赏
  • 举报
回复
另外
那位高人告知在下
怎么看汇编 ?
怎么把他和源代码对应上?
??
gaoxianfeng 2003-04-17
  • 打赏
  • 举报
回复
to CoolQ()题目就是错误信息。 :)

to bnwxf
OK了。 谢谢
原来的Makefile里加 -O2 了 忘删了
好判断力!!!佩服
:)

另一个贴字帮看看
http://expert.csdn.net/Expert/topic/1602/1602720.xml?temp=.8393366
大家也去看看
谢了
再在问题区留一两个小时 分都给你bnwx 衷心感谢
hs_guanqi 2003-04-16
  • 打赏
  • 举报
回复
被gcc优化掉了?
看一看对应的汇编代码在干什么?
gaoxianfeng 2003-04-16
  • 打赏
  • 举报
回复
大虾 们帮忙啊。
CoolQ 2003-04-16
  • 打赏
  • 举报
回复
可能是被优化掉了!你的GDB的错误信息是什么?
bnwxf 2003-04-16
  • 打赏
  • 举报
回复
你的断点设在哪里

gcc -c -g -Wall *.c

gcc -o * *.o

这样的编译没有加优化选项.不会去掉调试信息.
gaoxianfeng 2003-04-16
  • 打赏
  • 举报
回复
看不懂啊。谁帮忙啊?!!!
谢谢了
汇编 源码 部分列在下面
0x8049fa8 <main>: push %ebp
0x8049fa9 <main+1>: mov %esp,%ebp
0x8049fab <main+3>: push %edi
0x8049fac <main+4>: push %esi
0x8049fad <main+5>: push %ebx
0x8049fae <main+6>: sub $0x3c,%esp
0x8049fb1 <main+9>: and $0xfffffff0,%esp
0x8049fb4 <main+12>: sub $0x8,%esp
0x8049fb7 <main+15>: push $0x62
0x8049fb9 <main+17>: push $0x805a7f1
0x8049fbe <main+22>: mov 0x8(%ebp),%esi
0x8049fc1 <main+25>: mov 0xc(%ebp),%ebx
0x8049fc4 <main+28>: movl $0x0,0xffffffd0(%ebp)
0x8049fcb <main+35>: movl $0x0,0xffffffcc(%ebp)
0x8049fd2 <main+42>: movl $0x0,0xffffffc8(%ebp)
0x8049fd9 <main+49>: movl $0x0,0xffffffc4(%ebp)
0x8049fe0 <main+56>: movl $0x0,0xffffffc0(%ebp)
0x8049fe7 <main+63>: movl $0x0,0xffffffbc(%ebp)
0x8049fee <main+70>: movl $0x14,0x806a904
0x8049ff8 <main+80>: movl $0x35303235,0xffffffd8(%ebp)
0x8049fff <main+87>: movw $0x32,0xffffffdc(%ebp)
0x804a005 <main+93>: xor %edi,%edi
0x804a007 <main+95>: call 0x8049b90 <printf>
0x804a00c <main+100>: add $0x10,%esp
0x804a00f <main+103>: nop
0x804a010 <main+104>: push %eax
0x804a011 <main+105>: push $0x805a7f6
0x804a016 <main+110>: push %ebx
0x804a017 <main+111>: push %esi

int main(int argc, char * argv[])
{
int test;
int ret, op;
char * theOpts = "a:c:i:n:u:D";
char *netid = NULL, *device = NULL, *config = NULL;
char * user_num = NULL;
char *dstAddr = NULL;
u_char *auth_addr = NULL;
int daemon = 0; /* no daemon by default */
FILE *pidfile = NULL;
int pid;
char gao[6];
/* check for existing copies of the program */
char gao2;
char lirui='a';
User_Num = 20;
test =1;
gao2 = 'a';
strcpy(gao,"52052");
test = 2;
gao2 = 'b';
lirui='b';
printf("%c \n",gao2);
gaoxianfeng 2003-04-14
  • 打赏
  • 举报
回复
都是在作用范围可见
我是在main定义的 在没有调用其他函数前 r后就p察看 没有
r 一段 也没有

还未解决
胖和尚minifat 2003-04-10
  • 打赏
  • 举报
回复
呵呵,你不run,变量怎么有值
bnwxf 2003-04-10
  • 打赏
  • 举报
回复
局部变量在超出作用范围之后,symbol是不存在的。
可以试着定义成全局变量。
就我理解,能在symbol表中存在的变量都应该是全局的/静态的。
gaoxianfeng 2003-04-10
  • 打赏
  • 举报
回复
我真希望是如各位所猜测
:((
可惜
:( 55

死马当活马医 重启 没有用
yanghuajia 2003-04-10
  • 打赏
  • 举报
回复
我也碰到过。这个问题,当时移动 定义的 位置就
可以了。
netsbull 2003-04-10
  • 打赏
  • 举报
回复
gggzzz :)
blh 2003-04-10
  • 打赏
  • 举报
回复
1。 你没有定义改变量
2。没有加-g选项
3。你没有重新编译和链接你的程序
最有可能是3
mr_fanwei 2003-04-10
  • 打赏
  • 举报
回复
你的编译器可能出问题。重起计算机。
gaoxianfeng 2003-04-10
  • 打赏
  • 举报
回复
不成
gaoxianfeng 2003-04-10
  • 打赏
  • 举报
回复
我试试看 不过应该不可能 我是clean后make的
ari 2003-04-10
  • 打赏
  • 举报
回复
好像是因为可执行程序和源码不一致造成的。
确认最新的程序已经编译。
手工编译程序试试,不用make。
加载更多回复(1)

23,128

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧