Linuxで動作するCプログラムのデバッグ環境構築

投稿日: 更新日:

こんにちはー!

今回は、Linuxで動作するCのデバッグ環境の整え方をお話しします。

皆さんは、Raspberry PiとかのLinux上で動作するプログラムを作るときにどうしていますか、
Raspberry Pi 上で make して色々プログラムを作っていくのもいいですが、
コンパイルの速度が遅いですし、効率も落ちてしまいます。

では、どうすればいいのか。
Windows環境で、Linux上のプログラムを作ってテストしたいと思った時に
一番簡単なのは、仮想環境でLinuxを起動させてPCでmakeしていく方法です。
ただ、仮想環境は重たい切実な問題があります。

そこで、今回はできる限り軽い仮想環境を作って
Cプログラムをデバッグ出来る方法まで説明します。


作戦

まず、Linuxといってもたくさん派生しており、色々な環境があります。
そのため、かるーいOSもあるはずです。

Linux

ベースとなるLinuxを考えましょう。

Linuxの種類

OSの説明です。
私が知っている情報は、この4つしかありません(認識不足)

RedHat

RHEL(Red Hat Enterprise Linux) / CentOS / Fedora 等のサーバー向けのOSです。
RHEL は、有料のOSであるため、サポートや情報が多く、サーバーに使用されることがおおいです。
CentOS は、RHEL の無料版です。サポートが受けられませんが、信頼性が高い RHEL を使えるような形です。
Fedora は、新しい機能を追加していくOSです。最新の機能を試したい向けです。

Debian

昔からある OS です。
これをベースに多くのOSが派生しています。
このOSをベースに組み込み向けのLinuxなども作られることもあります。

Ubuntu

Devian ベースのOSで、個人向けだと有名なOSです。
デスクトップPC向けに様々なカスタマイズがされているOSです。
利用者が多いため非常に情報量が多いです。

BSD系

上の3種類と違ってLinuxではありませんが、よく耳にするOSなので紹介します。
Linux系のOSは、総じてGPLなのですが、BSD系のOSは、BSDライセンスとなります。
製品に組み込む際にBSDがよいといった場合に選ばれるOSです。

どのLinuxを選択するのか

結論からいいますと、Debian を今回選択しました。
というのもカスタイマイズされた Ubuntu は、有名なOSで情報量も多いのですが、
デバッグ環境だけに限れば、必要がないアプリがインストールされます。

そして、Debianは、Raspbianなど組み込みLinuxでベースとされることが多いため、
Debian での環境で何か開発すれば、それを他の組み込みに持っていくのが楽かと考えたためです。
Armadillo とかも Debian が動いています。

デスクトップ環境

Linuxを知っている方ならご存知ですが、デスクトップ環境は好きなものが選べます。
ここで選ぶものによって、非力なPCでは重たくなってしまいます。
Debian では、インストール中にいくつかデスクトップ環境を選ぶことができます。

デスクトップ環境の種類

Unity, GNOME

下記のに比べるとグラフィカルでUIが洗練されていますが、
その分メモリやパワーを使用します。
Ubuntu のデスクトップ環境を選ぶと標準で利用されます。
※Unity は Debian では選べません。

Xfce

当初、これを検討していました。
歴史があるデスクトップ環境のためか、
現在のPCでは軽快に動作する特徴を持っています。

LXDE

これは歴史は浅いですが、処理能力の低いPC向けに作られた環境です。
軽快に動作することを目的としています。

どのデスクトップ環境を選択するのか

今回は、LXDEを選択します。
目的が軽さというのがよいです。
デバッグ環境のみに使用するという目的とマッチしています。

デバッグ用ツール

ここはあんまり調査していませんでした。
Windows でもよく使用される Eclipse を使用したいと思います。


開発環境を整えよう

全てはかきませんが、流れを説明します。

前準備

次の環境を用意します。

・Oracle VM VirtualBox
仮想環境です。今回は 5.2.4 を使用します。
仮想環境は、スナップショットという機能を使うことで誤った設定をしても以前の段階に戻れるためおススメです。
VMware という選択肢もありますが、商用利用に制限があるためこちらを選択します。

・Debian
Debianのサイト」で
「Debian を入手する」→「ネットワークインストール」→「最小の CD を使って、ネットワークインストールする」を選択します。
「netinst CD イメージ (約 150-300 MB ですがアーキテクチャよって変わります)」の中にある
「i386」を選択して「debian-9.3.0-i386-netinst.iso」をダウンロードします。(x86用OSを想定)

・ネットワーク
プロクシなしで、ネットワークに接続できる環境を準備します。

VMで仮想環境を作成

新規作成する

1. 「Oracle VM VirtualBox」を起動して、「新規」を選択します。
2. タイプはLinux、バージョンはDebian(32-bit)を設定します
3. メモリサイズは緑の範囲で出来る限り多くとります。
4. ハードディスクでは「仮想ハードディスクを作成する」を選び「作成」。
5. ハードディスクはVDIを選択。サイズは可変サイズを選択
6. 「ファイルの場所とサイズ」になったら、HDDファイルの場所を設定してください。
場所やファイル名は変更がすこし大変なので注意。
また、ハードディスクのサイズは120GBほどに設定しましょう。
こちらは、変更が非常に困難なので極力大きめにします。

設定変更する

新規作成すると左側の領域に作成した仮想環境が表示されます。
これを選択した状態で「設定」を選ぶと、より設定変更が行えます。
次のように設定していきます。
1. 一般の高度で、クリップボードの共有を双方向にする
2. システムのプロセッサーで、CPU数を増やす
3. オーディオとUSBは無効化する(使用しないため)
4. ネットワークはNATとなっていること(外部にアクセスするため)
よくやる設定はこんなものです。

OSのインストール

1. 作成したプロジェクトを選び、起動を選びます。
2. 最初にISOを選択する画面が表示されるため「debian-9.3.0-i386-netinst.iso」を選択します
3. インストール方法は、グラフィカルじゃないインストール方法 Install を選択します。
※操作は、矢印キーとスペースキーで選択し、エンターキーで決定です。
4. あとは適当に進めていきます。途中で言語の設定が出た場合は「日本」を選びましょう
5. 途中で、初期インストールの設定が出たら、「LXDE」と「SSH サーバー」を選びましょう。
6. あとは適当に進めていけばOSのインストールが完了です。

OSの初期設定を行う

ターミナルを駆使して設定していきます。
スーパーユーザー権限で行うことが多いので「sudo su -」と入力しておくと楽です。

パスを英語化する

「デスクトップ」とかフォルダパスに
日本語が入っているとやり辛いので最初にやります。
1. xdg-user-dirs-gtk をインストールして、updateを実行します。

sudo apt-get install xdg-user-dirs-gtk
LANG=C xdg-user-dirs-gtk-update

Guest Additions CDをインストールする

Guest Additions CD とは、
VM上で動くOSでインストールすることで、
共有フォルダや画面解像度変更、クリップボード共有など
色々と使いやすくなるツールです。
1. VMのメニューバーにある「デバイス」→「Guest Additions CDイメージの挿入…」
2. CDが認識されます。このままだと実行できないので、一旦ディスクのフォルダをデスクトップへコピー(cdrom というフォルダにします)
3. 実行する前に、実行に必要なソフトをインストールします。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install dkms
sudo apt-get install build-essential module-assistant 
sudo apt-get install linux-headers-686 linux-headers-4.9.0-4-686
※Linuxの部分は、DebianのLinuxカーネルのバージョンに依存する
そのため、下記のVBoxLinuxAdditions.runを実行すると
必要なインストールファイルが表示されるのでそれを参考にするよい

4. Guest Additionsをインストールして再起動

cd /home/***/Desktop/cdrom
sudo ./VBoxLinuxAdditions.run
sudo reboot

※もし「VBoxLinuxAdditions.run」でエラーが出た場合は表示内容をインストールする。
それでも駄目なら、VirtualBoxを最新版にする。
(Debianのリリース日より新しいバージョンだと確実。)
5. Guest Additions CD を取り出す
VMのメニューバーにある「デバイス」→「光学ドライブ」から除去的なのを選ぶ

共有フォルダの設定

Windows上とファイルの行き来する際に、共有フォルダを作ると便利です
1. VMのメニューバーにある「デバイス」→「共有フォルダー設定…」
2. フォルダの追加ボタンで、ダイアログを表示させる
3. フォルダのパスを入力する部分で、右端の▼を押して「その他…」を選び、フォルダを選択
4. 「自動マウント」と「永続化する」を選びOKを押す
5. OSを再起動
6. 共有フォルダ「/media/sf_***」への権限を付与

sudo gpasswd -a ユーザ名 vboxsf

7. OSを再起動

不要なファイルを削除する

いらないファイルは予め削除しちゃいましょう。
下記のコマンドで、オフィスツールや画像編集ソフトをアンインストールできます。

sudo apt remove libreoffice*
sudo apt remove gimp*
sudo apt-get autoremove

あると便利なソフトをインストールする

コンパイルに必要なmakeやファイルサーバーのsambaは必須!よく使うので。

sudo apt-get install samba
sudo apt-get install make

サーバーを自動起動させる

あとは、SSHやSAMBAの設定を好みでしておきましょう。

Eclipseのインストール

Eclipseをインストールしていきます。
ここからは「Synaptic パッケージマネージャ」を使用していきます。
「Synaptic パッケージマネージャ」というのは、アプリストアみたいなものです。
1. スタートメニューから「設定」→「Synaptic パッケージマネージャ」
2. 次の4つを選択した後に適用を押し、インストールします。
・eclipse(本体)
・eclipse-cdt(C/C++開発用)
・pleiades(eclipseの日本語化)
・gdb(gccのデバッグ支援機能)
3. スタートメニューから「プログラミング」→「eclipse」を選択して、起動させて終了させる。
4. 日本語化のために次のように「eclipse.ini 」を開く

sudo nano /usr/lib/eclipse/eclipse.ini

5. 最終行に次の1行を追加して上書きする。

-javaagent:/usr/lib/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

6. ターミナルで次のコマンドをうつ。

eclipse -clean

7. これでC言語でデバッグ環境の準備を終えました。


デバッグしてみよう

ここからは、通常のeclipseの使い方と同じです。
ここについては私がもっと詳しくなったら記述したいと思います。


おまけ

配布用のサイズを縮小する

仮想環境で作るメリットとして、
一旦作ってしまえば、面倒な環境構築無しで、他のパソコンでもすぐに実行できるということがあります。
ただ1つ問題がありまして、この仮想環境のファイルシステムはどんどん大きくなっていきます。
可変サイズという設定にしているので、
使用しなくなったらサイズが減ると思っているかもしれませんが減りません。

配布する際にこのようにファイルサイズが巨大になったまま配布すると扱いが大変なので、
縮小させることを行います。
1. ゴミ箱は空にしておく
2. スナップショットを使用しているならば、統合するためにスナップショットを全て統合させる。
3. 仮想OS上(Debian)で次のコマンドをうつ

sudo dd if=/dev/zero of=zero bs=4k; \rm zero

4. 仮想OSをシャットダウン
5. Windows上で管理者権限でコマンドプロンプトを起動させる
6. VirtualBox のインストール先にカレントディレクトリを移動させる
5. 「VBoxManage list hdds」で縮小させるVDIのUUIDを調査する
6. 「VBoxManage odifyhd [UUID] –compact」で縮小させる
7. 圧縮ソフト7-zipを使って、7z形式で高圧縮させる

広告

コメントをどうぞ(承認された後に公開されます。メールアドレスの記入は自由ですが、記入した場合でも一般公開されることはありません)

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中