cgdbを使ってプログラムのデバッグを行う

Published: 2016年3月8日 by tomsato

概要

cgdbを使ってC言語プログラムのデバッグを行う
gdbと違ってcgdbを使うとソースコードを見ながらプログラムのステップ実行が行える

test-thumbnail2

cgdbを使うための準備

yumを使ってcgdbをインストールする

$ sudo yum install cgdb -y

ついでにテストプログラムを用意する

#include <stdio.h>

int sum(int a, int b) {
    int total = 0;
    total = a + b;
    return total;
}

int main() {
    int test;

    test = sum(1, 2);
    printf("%d\n", test);
}

cgdbを使ってデバッグ

// テストのソースをコンパイル
$ gcc -g -O0 test1.c
// 一応正常に実行できることを確認する
$ ./a.out
3

// cgdbの起動
$ cgdb a.out

ここまで行うと冒頭の画像のような画面が表示されるはず

オプション 意味
-g ファイルにデバッグ情報を付加する。これがないとデバッグ時に変数名や行番号が表示されない
-O0 最適化を行わない。最適化を行うと、コードの入れ替えや削除が行われてしまい、デバッグしにくくなる

使い方について

// ブレークポイントの設定
// main関数をブレークポイントにしている
(gdb) break main

// main関数に入るまで実行させる
(gdb) run

// ステップ実行する
// sは関数の仲間でステップ実行させる
(gdb) s
// nは関数の中までは見ない
(gdb) n

// 変数「total」の中身を確認する
(gdb) print total
$1 = 0

// 変数の型を調べる
(gdb) whatis total
type = int

// 変数「total」の中身を変更する
(gdb) set total=100

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧