即使使用 -g 选项,GCC 也不会产生行号信息 [英] GCC doesn't produce line number information even with -g option

查看:16
本文介绍了即使使用 -g 选项,GCC 也不会产生行号信息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经从源代码构建并安装了 GCC 4.8.1:

I have built and installed GCC 4.8.1 from source:

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ./configure --disable-multilib
Thread model: posix
gcc version 4.8.1 (GCC) 

我写了一个简单的无用程序:

And I've written a simple useless program:

$ cat hw.c
#include <stdio.h>

void foo()
{
    int a;
    scanf("%d", &a); /* So I can press ctrl+c here. */
    printf("Hello world!
");
}

int main()
{
    foo();   
}

现在我编译这个:

$ gcc -g -O0 hw.c -o hw

然后开始用 GDB 调试它:

Then started debugging it with GDB:

$ gdb hw
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
Copyright (C) 2012 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-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /home/calmarius/workdir/crucible/hw/hw...done.
(gdb) 

运行它并立即按Ctrl+C:

Run it and Ctrl+C it immediately:

(gdb) run
Starting program: /home/dcsirmaz/workdir/crucible/hw/hw 
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7b018b0 in __read_nocancel () at ../sysdeps/unix/syscall-template.S:82
82  ../sysdeps/unix/syscall-template.S: Nincs ilyen fájl vagy könyvtár.

我在回溯中有函数名称,但我的代码中没有行号:

I got function names in the backtrace but no line numbers in my code:

(gdb) bt
#0  0x00007ffff7b018b0 in __read_nocancel () at ../sysdeps/unix/syscall-template.S:82
#1  0x00007ffff7a95ff8 in _IO_new_file_underflow (fp=0x7ffff7dd4340) at fileops.c:619
#2  0x00007ffff7a9703e in _IO_default_uflow (fp=0x7ffff7dd4340) at genops.c:440
#3  0x00007ffff7a74fb6 in _IO_vfscanf_internal (s=<optimized out>, format=<optimized out>, argptr=0x7fffffffe018, errp=0x0) at vfscanf.c:620
#4  0x00007ffff7a790bd in __isoc99_scanf (format=<optimized out>) at isoc99_scanf.c:37
#5  0x000000000040054e in foo ()
#6  0x0000000000400568 in main ()

出了什么问题?也许是配置的问题?

What's gone wrong? Maybe is it something with the configuration?

推荐答案

你的 gdb 太旧了——你需要一个更新的 gdb(我用 7.6)来理解 gcc 4.8.1 生成的调试信息

Your gdb is too old -- you need a more recent gdb (I use 7.6) to understand the debugging info generated by gcc 4.8.1

这篇关于即使使用 -g 选项,GCC 也不会产生行号信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆