定位C程序内存错误

这些信息是 ubuntu 7.10 , gcc 4.1.3, gdb 6.6-debian 跟踪的

当printf不够有效时。。。。

1。读懂错误信息

一个简单的例子;

#include <stdio.h>

#include <stdlib.h>

void a(){

char *s = "ee";

free(s);

}

int main(int argc, char **argv){

a();

return 1;

}

程序运行可以得到一下错误信息:

 *** glibc detected *** ./r: free(): invalid pointer: 0x0804865c ***
  ======= Backtrace: =========
 /lib/tls/i686/cmov/libc.so.6[0xb7e2dd65]
 /lib/tls/i686/cmov/libc.so.6(cfree+0x90)[0xb7e31800]
 ./r[0x804838c]
 ./r[0x80483a4]
 /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe0)[0xb7dda050]
 ./r[0x8048311]
 ======= Memory map: ========
 08048000-08049000 r-xp 00000000 08:05 1047431    /home/jing/Desktop/ee/r
 08049000-0804a000 rw-p 00000000 08:05 1047431    /home/jing/Desktop/ee/r
 0804a000-0806b000 rw-p 0804a000 00:00 0          [heap]
 b7db8000-b7dc2000 r-xp 00000000 08:05 3499334    /lib/libgcc_s.so.1
 b7dc2000-b7dc3000 rw-p 0000a000 08:05 3499334    /lib/libgcc_s.so.1
 b7dc3000-b7dc4000 rw-p b7dc3000 00:00 0
 b7dc4000-b7f08000 r-xp 00000000 08:05 3532035    /lib/tls/i686/cmov/libc-2.6.1.so
 b7f08000-b7f09000 r--p 00143000 08:05 3532035    /lib/tls/i686/cmov/libc-2.6.1.so
 b7f09000-b7f0b000 rw-p 00144000 08:05 3532035    /lib/tls/i686/cmov/libc-2.6.1.so
 b7f0b000-b7f0e000 rw-p b7f0b000 00:00 0
 b7f22000-b7f24000 rw-p b7f22000 00:00 0
 b7f24000-b7f3e000 r-xp 00000000 08:05 3499469    /lib/ld-2.6.1.so
 b7f3e000-b7f40000 rw-p 00019000 08:05 3499469    /lib/ld-2.6.1.so
 bff2d000-bff42000 rw-p bff2d000 00:00 0          [stack]
 ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]
 Aborted (core dumped)

backtrace 提供函数的调用情况。

memroy map 是程序分配是虚拟内存的分配情况, 它的格式在各个操作系统下是不同的。 以上信息是linux下的运行。实际上输出的是/proc/pid/maps的信息。

(这个图在我的浏览器下显示不正常,可以点击memory map的连接查看源)

40049000-4035c000 r-xp 00000000 03:05 824473  /jdk1.5/jre/lib/i386/client/libjvm.so
|<------------->|  ^      ^       ^     ^        |<----------------------------------->|
  Memory region    |      |       |     |                           |
                   |      |       |     |                           |
  Perm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值