嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

周梦康 发表于 2015-11-22 6057 次浏览 标签 : LinuxCgccgdb

免费领取阿里云优惠券 我的直播 - 《PHP 进阶之路》

错误代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char argv[])
{
    for (int i = 0; i < argc; ++i)
    {
        printf("%s\n", argv[i]);
    }
	return 0;
}

编译运行结果如下

[zhoumengkang@localhost unix]$ gcc test.c -std=c99
[zhoumengkang@localhost unix]$ ./a.out 
段错误 (core dumped)

学习ddb的调试使用

[zhoumengkang@localhost unix]$ gcc -g test.c -std=c99
[zhoumengkang@localhost unix]$ gdb a.out
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /media/psf/coding/unix/a.out...done.
(gdb) run
Starting program: /media/psf/coding/unix/a.out 

Program received signal SIGSEGV, Segmentation fault.
0x0000003c9a04812c in vfprintf () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.x86_64
(gdb) bt
#0  0x0000003c9a04812c in vfprintf () from /lib64/libc.so.6
#1  0x0000003c9a04f48a in printf () from /lib64/libc.so.6
#2  0x00000000004004ff in main (argc=1, argv=0x7fffffffe4b8 "\364\346\377\377\377\177") at test.c:9
(gdb) frame 2
#2  0x00000000004004ff in main (argc=1, argv=0x7fffffffe4b8 "\364\346\377\377\377\177") at test.c:9
9	        printf("%s\n", argv[i]);
(gdb) break test.c:8
Breakpoint 1 at 0x4004dc: file test.c, line 8.
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /media/psf/coding/unix/a.out 

Breakpoint 1, main (argc=1, argv=0x7fffffffe4b8 "\364\346\377\377\377\177") at test.c:9
9	        printf("%s\n", argv[i]);
(gdb) print argv[i]
$2 = -12 '\364'
(gdb) next

Program received signal SIGSEGV, Segmentation fault.
0x0000003c9a04812c in vfprintf () from /lib64/libc.so.6
(gdb)

参考:http://www.unknownroad.com/rtfm/gdbtut/gdbsegfault.html

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表