繁体   English   中英

我不明白gdb的输出

[英]I can't understand the output of 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行设置断点。我使用了backtrace和step命令,但我根本不理解它们的输出。 当我输入“ backtrace full”时,gdb给了我这个:

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

这到底是什么意思? 什么是_start? 什么是../sysdeps/i386/elf/start.S:65? 当我明确声明wordcount和len时,怎么可能没有本地人呢? 我尝试过Google,但是我在gdb上可以找到的每个教程都显示它与我所得到的输出完全不同(更详细)。 当我搜索得到的字符串时,我在ARM体系结构上得到了很多结果。

我正在使用它的程序运行得很好。

对于作品的一些定义。 您的程序至少有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是执行,它不是(或者没有,或者没有任何更长)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM