我此刻只是想学习使用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架构上获得了大量结果。
答案 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
执行时有效,并且不是(要么还没有,要么不再)。