簡體   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