有关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
当调试时却没有出现上面的问题!
请赐教
如言不达意 希望提出我没表述明白的地方。
谢谢
...全文
2986 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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

死马当活马医 重启 没有用
  • 打赏
  • 举报
回复
我也碰到过。这个问题,当时移动 定义的 位置就
可以了。
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,217

社区成员

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

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