我无法理解gdb的输出

时间:2015-11-13 18:59:34

标签: c gdb

我此刻只是想学习使用gdb。我使用它的程序完美无缺;我没有尝试调试它或任何东西;我只是在测试gdb的功能。这是源代码:

#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main( int argc, char **argv ){
        int wordcount = 0;
        int len = strlen( argv[1] );
        for( int i = 0; i < len; i++ ){
                if( isspace( argv[1][i] ) && !isspace( argv[1][i-1] ) ) 
                        wordcount++;
        }   
        if( !isspace( argv[1][len-1] ) ) wordcount++;
        if( wordcount == 0 && len > 0 ) // if all characters were non-whitespace,
                wordcount = 1;          // then there was exactly one word
        printf( "%d\n", wordcount );
        return 0;
}   

我启动了gdb并运行程序,在第7行和第9行设置断点。我使用了回溯和步骤命令,我根本不理解它们的输出。当我输入&#34;回溯全部&#34; gdb给了我这个:

#0  _start () at ../sysdeps/i386/elf/start.S:65
No locals.

这究竟是什么意思?什么是_start?什么是../sysdeps/i386/elf/start.S:65?当我明确宣布wordcount和len时,怎么会没有本地人呢?我已经尝试了谷歌,但是我在gdb上找到的每个教程都表明它从我得到的产生完全不同(更详细)的输出。当我获得Google的字符串时,我在ARM架构上获得了大量结果。

1 个答案:

答案 0 :(得分:1)

  

我正在使用的程序完美无缺;

对于作品的某些定义。你的程序至少有2个错误。

  

当我输入“backtrace full”时,gdb给了我这个:......这究竟是什么意思?

如果不知道在到达此点之前使用的命令,很难说清楚。您很可能在next返回之前完成main,因此登陆_start(这是调用main的例程,这是执行任何程序的地方通常开始)。

  

什么是../sysdeps/i386/elf/start.S:65?

_start例程是GLIBC的一部分,在sysdeps/i386/elf/start.S源文件中定义。

  

怎么可能没有本地人,显然我已经宣布了wordcount和len?

main内的,因此main中存在的任何本地人都无关紧要:它们仅在main执行时有效,并且不是(要么还没有,要么不再)。