簡體   English   中英

即使使用-g選項,GCC也不會生成行號信息

[英]GCC doesn't produce line number information even with -g option

我從源代碼構建並安裝了GCC 4.8.1:

$ 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) 

我寫了一個簡單無用的程序:

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

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

int main()
{
    foo();   
}

現在我編譯這個:

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

然后開始用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:

(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.

我在回溯中有函數名但在我的代碼中沒有行號:

(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 ()

出了什么問題? 也許是配置的東西?

你的gdb太舊了 - 你需要一個更新的gdb(我使用7.6)來理解gcc 4.8.1生成的調試信息

通常GCC使用dwarf作為其主要調試文件格式,您需要在使用標志--with-dwarf2構建gcc時啟用矮人支持。

構建編譯對象時,可以使用-ggdb而不是-g ,這是一個更具體的解決方案,但僅適用於gdb

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM