Ubantu下编译链接通过,运行时却找不着函数,WHY?

leaf_yyl 2012-11-13 01:34:22
Breakpoint 1, 0x08048e0a in chash_create ()
(gdb) step
Single stepping until exit from function chash_create,
which has no line number information.

Program received signal SIGSEGV, Segmentation fault.
0x0019e729 in ?? () from /lib/tls/i686/cmov/libc.so.6
(gdb)
Cannot find bounds of current function

gdb调试信息如上。step进入chash_create时报断错误。
...全文
178 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
leaf_yyl 2012-11-13
  • 打赏
  • 举报
回复
引用 7 楼 Michael_g 的回复:
mm_alloc ? 这个我没用过。你可以用eclipse 进行调试,这样就可以定位在出错的行上了。
我找到原因了,多谢!调试代码中内存申请死循环了。。。不过我很奇怪,step不是单步运行么?怎么就直接跑挂掉了。。。
Michael_g 2012-11-13
  • 打赏
  • 举报
回复
光看这个是看不出问题的,你还是在几个关键点下输出一下信息吧,这样也好知道停在哪了。
leaf_yyl 2012-11-13
  • 打赏
  • 举报
回复
引用 7 楼 Michael_g 的回复:
mm_alloc ? 这个我没用过。你可以用eclipse 进行调试,这样就可以定位在出错的行上了。
mm_alloc是自己写的小函数。。。没装eclipse...,装了一时半会也不会用。。
Michael_g 2012-11-13
  • 打赏
  • 举报
回复
mm_alloc ? 这个我没用过。你可以用eclipse 进行调试,这样就可以定位在出错的行上了。
leaf_yyl 2012-11-13
  • 打赏
  • 举报
回复
函数调用如下: h = chash_create(HASH_TABLE_DEFAULT_LEN, HASH_COPY_KEY); 函数如下: chash* chash_create(UINT size, UINT h_flag) { chash* h = NULL; h = SYS_Malloc(sizeof(chash)); if(!h) { return NULL; } h->size = size; h->count = 0; h->h_flag = h_flag; h->cell_arr = SYS_Malloc(sizeof(chash_cell*) * size); if(!h->cell_arr) { SYS_Free(h); return NULL; } memset(h->cell_arr, 0, sizeof(chash_cell*) * size); return h; } 其中SYS_Malloc 是宏定义,调用的mm_malloc。 #define SYS_Malloc(size) mm_alloc(size, __FILE__, __func__, __LINE__) Breakpoint 1, 0x08048e0a in chash_create () (gdb) break mm_malloc Function "mm_malloc" not defined. Make breakpoint pending on future shared library load? (y or [n]) y Breakpoint 2 (mm_malloc) pending. (gdb) step Single stepping until exit from function chash_create, which has no line number information. Program received signal SIGSEGV, Segmentation fault. 0x0019e729 in ?? () from /lib/tls/i686/cmov/libc.so.6 gdb调试信息并未走到第二个断点。。。
leaf_yyl 2012-11-13
  • 打赏
  • 举报
回复
makefile如下: myapp: main.o mm.o hash.o list.o puzzle.o clist.o chash.o gcc -g -o ../myapp ../lib/main.o ../lib/clist.o ../lib/chash.o ../lib/mm.o ../lib/puzzle.o ../lib/list.o ../lib/hash.o main.o: ../src/main.c ../src/userdef/userdef.h ../src/puzzle/puzzle.h gcc -o ../lib/main.o -c ../src/main.c mm.o: ../src/userdef/mm.c ../src/userdef/mm-pri.h ../src/userdef/mm-pub.h gcc -o ../lib/mm.o -c ../src/userdef/mm.c hash.o: ../src/userdef/hash.c ../src/userdef/hash.h gcc -o ../lib/hash.o -c ../src/userdef/hash.c list.o: ../src/userdef/list.c ../src/userdef/list.h gcc -o ../lib/list.o -c ../src/userdef/list.c puzzle.o: ../src/puzzle/puzzle.c ../src/puzzle/puzzle.h ../src/userdef/userdef.h gcc -o ../lib/puzzle.o -c ../src/puzzle/puzzle.c clist.o: ../src/userdef/clist.c ../src/userdef/clist.h ../src/userdef/mm-pub.h gcc -o ../lib/clist.o -c ../src/userdef/clist.c chash.o: ../src/userdef/chash.c ../src/userdef/chash.h ../src/userdef/mm-pub.h gcc -o ../lib/chash.o -c ../src/userdef/chash.c 调用puzzle.o里调用chash.o里的函数时挂掉了。。。
Michael_g 2012-11-13
  • 打赏
  • 举报
回复
你看一下你的代码吧,肯定内存访问越界了,你应该是传递了无效的指针给某个libc.so.6 库里的函数。
leaf_yyl 2012-11-13
  • 打赏
  • 举报
回复
引用 1 楼 Michael_g 的回复:
你是在编译机上运行你编译的程序吗?
代码文件src里包含 main.c 和文件userdef,puzzle 我执行userdef文件里函数没问题,执行puzzle里的文件就崩溃了。。。 要不要贴下我写的makefile文件?
leaf_yyl 2012-11-13
  • 打赏
  • 举报
回复
没有什么编译机,就是自己电脑上安装Ubantu系统,然后编译链接生成可执行文件,然后直接运行之的
Michael_g 2012-11-13
  • 打赏
  • 举报
回复
你是在编译机上运行你编译的程序吗?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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