C言語 Linux

vimユーザー向けGDBフロントエンド「CGDB」が便利だった

C言語のprintfデバッグから卒業しようと思い、本格的にデバッグツールの使い方を勉強し始めました。デバッグツールと言えばGDBが代表的ですが、GDBそのままではソース中の実行箇所がわかりにくく、なんか使いにくい…。

ということで、何か良いフロントエンドはないものかと探してみたところ、「CGDB」なるフロントエンドを見つけたので使ってみることにしました。

CGDBをインストール

CGDBのインストール自体は、yumとかapt-getなどのパッケージ管理ツールを使えば簡単です。CentOSの場合、yumを使って以下のコマンドでインストールできます。

# yum install -y cgdb

使ってみる

起動する

CGDBを使ってデバッグするときには、cgdbの引数として実行ファイルを指定します。もちろん、実行ファイルには「-g」を付けてデバッグ情報を埋め込んでおきましょう。

$ cgdb <実行ファイル名>

起動すると以下のように、上半分にソースコード、下半分にGDBのコマンド入力画面が表示されます。以降、上下の画面を行ったり来たりしながらデバッグ作業を進めていきます。

vimライクな操作が快適

CGDBの便利なところは、ソースコードを見ながらvimライクなコマンド体系でデバッグができる点です。例えば、上下の画面の移動は「ESC」と「i」、vimでいうところの入力モード切替と同じ操作で可能です。

ソースコード画面では「カーソル移動」や「文字列の検索」など、vimと同じコマンドを使ってソースを探索できます。また、スペースキーを押すと、カーソル位置でブレークポイントをON/OFFしてくれるので、GDBのコマンドよりもサクサクと設定できて便利です。

ブレークポイントの設定ができたら、GDBコマンドの画面に戻って「run」を叩けばプログラムが実行されます。ブレークポイントにかかったときはソースコード画面でもその箇所を表示してくれるので、どの箇所が実行されているのか視覚的に把握できるのでデバッグも捗ります。

もちろん、GDBのコマンドもそのまま使えるので、変数の表示やセットも可能です。

まとめ

GDBのフロントエンドとしては「DDD」なども有名ですが、あちらはGUI環境が前提となっているので、CUI派の私としてはちょっと不満がありました。

その点、CGDBはCUI環境でも問題なく動作しますし、何よりvimライクな操作ができることが便利でした。GDBのために思わずemacsに乗り換えようとするところでしたが、まだまだvimユーザーとしてやっていけそうです笑。

あとはちゃんとGDBのコマンド覚えなきゃですが、それについては近いうちにWikiにまとめようと思います。

ではではノシ

関連記事

Linux

2019/10/6

Docker + Growiでイントラ向けWikiを立ち上げる

チーム開発をしていくうえで、課題の1つになるのが情報共有です。チームの歴史が長いと経験値は溜まっていきますが、それらが情報として整理されていないとメンバー交代時などに大きなコストが発生します。 そこで、イントラ向けのナレッジベース(Wiki)を探していたところ、Growiという良さげなOSSを見つけたので、お試し環境を立ち上げてみることにしました。手元の環境はUbuntu18.04ですが、Linuxであれば大体同じような手順になると思います。 目次1 Dockerのインストール2 Growiの準備2.1 ...

この記事を読む

Linux

2019/8/14

カゴヤVPSで自分専用の開発環境を立ち上げてみた

どこからでもアクセスできる自分専用の開発環境が欲しい…。 そんな願いを叶えるべく、VPSのことを調べていたのですが、いままで「なんか難しそう…」と尻込みしていました。しかし、最近は値段も安くて扱いやすいVPSも増えてきたので、この機会に試してみることにしました。 ということで、今回はVPSを契約して最低限の環境を立ち上げるまでの備忘録です。 目次1 VPSについて1.1 VPSって何?1.2 カゴヤのVPSを契約してみた2 手順1:インスタンスを立ち上げる3 手順2:インスタンスにSSH接続する4 手順3 ...

この記事を読む

Windows

2019/5/5

Windows10で不要なブートエントリを削除する

Windowsのブートまわりで少しハマったので覚え書きです。 私のメインPCはWindows10とUbuntuのデュアルブートだったのですが、とある事情でUbuntuを削除しWindowsのみの構成に戻すことにしました。ちなみに、デュアルブート時の環境はこんな感じ(だったはず)。 元に戻したくなったときのことを考え、別HDD(ドライブB)にUbuntuとGRUBを入れ、GRUB経由でWindowsとUbuntuを立ち上げる形にしていました。 そのため、起動ドライブをWindowsのドライブ(ドライブA)に ...

この記事を読む

C言語 プログラミング

2018/12/25

mmapの下処理にftruncate関数を利用する

以前このブログで公開した記事の中に、C言語のmmap関数の使い方についてまとめた記事がありました。 Corgi Lab. ~備忘録のための技術ブログ~  3 shares 3 users 4 pocketsファイルの読み書きにmmapを使ってみるプログラムのループ中でファイルに何かしらのデータを書き込むとき、そのたびにwriteをしていたのではディスクへのI/Oが頻発してしまい、パフォーマンスに影響することがあります。「C言語だとそんなときはmmapを使うと良い」と ...

この記事を読む

Mac Linux

2018/12/2

Mac mini (2012) にUbuntu18.04をインストールしてみた

今年のアップデートにより、ついに旧型となってしまったMac mini(2012年モデル)。私の自宅にも箱に収められたままひっそりと眠るMac miniがありました。 約6年前のモデルと言うことで、最近のマシンから見ればスペック的に見劣りするPCになってしまいましたが、Linux機として運用するならまだまだ輝けるはず! ということで、今回はMac miniをUbuntu専用マシンとして復活させてみたので、その備忘録です。 目次1 用意するもの2 Ubuntuのインストール3 インストール後のセットアップ3. ...

この記事を読む

-C言語, Linux

Copyright© Corgi Lab. ~備忘録のための技術ブログ~ , 2019 All Rights Reserved.