C言語のgdbで苦戦した話


先日初めて、C言語でgdbを用いてデバッグしたのですが、少々苦戦したのです。

やりたいこと

gdbを用いてちゃんとHelloWorldを出力させる。

ディレクトリ構成

drwxrwxr-x 2 zombiest zombiest 4096  9月 29 22:34 c_file
drwxrwxr-x 2 zombiest zombiest 4096  9月 29 22:43 gdb_file

下で説明しますが、カレントディレクトリよりgccコマンドを打ち込みます。

ソースコード

#include <stdio.h>

int main(void)
{
    char* str = "Hello World";
    printf("%s\n", str);
    return 0;
}
次にコマンドを打ち込んでファイルを出力させます。
gcc コンパイルするファイル -o 出力先ファイル
gcc ./c_file/HelloWorld.c -o ./gdb_file/HelloWorld.out
ファイルが出力されたか確認しましょう。
ls -l ./gdb_file/
-rw-rw-r--  1 zombiest zombiest 19232  9月 29 23:11 HelloWorld.out

じゃあ、最後にgdbコマンド叩いてデバッグしてみましょう!と言いたいのですが

ここで注意です!

気づいた方もいらっしゃるかもしれませんが、今のファイル権限は"664"です。
ここでは詳しくは解説しませんが、実行権限がない状態になります。

実行権限を変えてあげる必要があります。
chmod 755 ./gdb_file/HelloWorld.out

気を取り直してgdbコマンド投入

gdb ./gdb_file/HelloWorld.out
(以下、抜粋)
Reading symbols from ./gdb_file/HelloWorld.out...
(gdb) run
Starting program: /home/zombiest/working/gdb_file/HelloWorld.out 
Hello World
[Inferior 1 (process 20417) exited normally]
(gdb) 

できました〜
ちなみに、実行権限664の状態でやると
/gdb_file/HelloWorld.out: 実行できません: 許可がありません
って怒られます。いわゆる”Permission Denied”ってやつですね!気をつけましょう。
ここまで読んで頂き、ありがとうございました!