C LANGUAGE TECHNOLOGY

【C言語】おすすめ開発ツールのMakeとGDBの使い方

悩んでいる人

C言語が挫折しそうなんだけど,楽に開発する方法を教えて!

こういった悩みにお答えします.

本記事の信頼性

  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校コンピュータサイエンス学部2020年の世界大学学術ランキング17位)で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発.
  • プログラミング歴15年以上,習得している言語: C/C++,Java,Python,Ruby,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開
  • 2020年1月~現在はアメリカのスタートアップ「Guarantee Happiness LLC」CTOとしてECサイト開発やWeb/SNSマーケティングの業務.(コロナの影響のため,現在は日本からアメリカの仕事をリモートワーク.)
  • 2020年からC言語で業務委託のエンジニアとして3件,技術顧問として1件,講師として1件の案件を請け負った実績.

こういった私が解説していきます.

C言語はPython,Ruby,HTML/CSS/JS/PHPのようなアプリケーション系の言語と比較して難易度が高いですよね.

私がC言語を習い始めた時は,デバッグがうまくいかなくて何度も挫折しそうになり,その度に開発ツールに助けられました.

そんなあなたに元東大教員がおすすめするC言語の開発ツールとしてMakeとGDBを紹介します.

Make

MakeはGNUが開発した代表的なビルド自動化ツールで,C言語だけでなくプログラミング言語全般で利用できます.

もともと複数のファイルが複雑な依存関係をしている際に,コンパイル作業を軽減するためにMakeは開発されました.

つまり,Makeを効果的に利用すると開発時間を大幅に削減できます.

Makeは,Linuxカーネルを含む多くのC言語で開発されたソフトウェアで利用されています.

LinuxカーネルはGitでバージョン管理されていますが,GitもC言語で開発されたソフトウェアでMakeでビルドできます.

このようにMakeはC言語の開発ツールでよく使われていますので,使いこなせるようにしましょう.

ただし,初見でMakeはとても使いづらいツールなので,オライリー・ジャパン発行の書籍「GNU Make 第3版」を読みましょう.

この本は有料ですが,各章のPDFは無料で読めますので是非読みましょう.

各章のPDFだと目次の各章へのリンクがなくて読みにくいと思いますので,こちらから一つのPDFになったものをダウンロードして読むことをおすすめします.

ただし,理解が難しい表現がありますので,英語ができる方は「Makeの公式マニュアル」を読むことをおすすめします.

GNU Debugger (GDB)

GDBは,プログラムの実行の変更や追跡する機能を提供する開発ツールです.

また,プログラムの変数の値を修正したり,監視したりすることもできます.

これまでにC言語で開発したプログラムを実行する時に,「セグメンテーション違反(segmentation fault)」と出力されて強制終了したことがあると思います.

その際,printfデバッグ(printf関数でセグメンテーション違反した場所を探すこと)は面倒ですよね.

そのセグメンテーション違反した場所を簡単に特定できるのがGDBなのです.

※マルチスレッドプログラミングでは,printfデバッグが便利なことがあります.

GDBの使い方は,日本語ではこちらのページが参考になります.

英語ができる方は「GDBの公式マニュアル」を読みましょう.

MakeとGDBの利用例

MakeとGDBの利用例を紹介します.

Makeのコマンドを記述したMakefileの実装は以下になります.

GDBを使う場合はCFLAGSに-gと-ggdbオプション(16行目)を追加します.また,17行目のようにCFLAGSに-Wallオプションを追加しておきましょう.

-Wallは,コードが怪しいところを警告してくれるオプションで,使うとデバッグ時間を短くできるので便利です!

C言語のサンプルコードmake_gdb.cは以下になります.

このコードでは,NULL番地のアドレスに123を代入します.

もちろん実行するとセグメンテーション違反になります.

step
1
コードのビルド

上記のMakefileとmake_gdb.cファイルを同じディレクトリにダウンロードした後に,makeコマンドを入力してコードをビルドします.

step
2
普通に実行

普通に実行するために,make runと入力します.

セグメンテーション違反(Segmentation fault)が発生しました...

step
3
GDBで実行

GDBで実行するために,make gdbと入力します.

19行目でrunと入力して実行すると,22行目にセグメンテーション違反(Segmentation fault)が発生し,23~24行目に発生した場所がmake_gdb.cファイルの13行目であることがわかります.

このようにGDBを利用するとセグメンテーション違反した場所が簡単に特定できます.

このコードは短いのでセグメンテーション違反が発生する場所を簡単に見つけられます.

しかし,数万行以上の大規模なソフトウェアの場合,全部読んでセグメンテーション違反を発生する場所を見つけるのはとても大変ですよね.

GDBは大規模なソフトウェアで効果を発揮します!

まとめ

元東大教員がおすすめするC言語の開発ツール2選としてMakeとGDBを紹介しました.

MakeとGDBは初見では使いこなすのが難しいツールですが,使いこなせばC言語のプログラミングがとても楽になりますので,是非身につけましょう!

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

友だち追加

独学が難しいあなたは,C言語を学べるおすすめのオンラインプログラミングスクール3社で自分に合うスクールを見つけましょう.

-C LANGUAGE, TECHNOLOGY
-, , , , , , , , ,