M1Mac+VSCodeでC言語のデバッグ環境を整える!【初心者向け】

M1Mac+VSCodeでC言語のデバッグ環境を整える!【初心者向け】
スポンサーリンク

みなさんこんにちは。今回はM1Mac+VSCodeでC言語のデバッグをする方法について解説していきます。

C言語はコンパイル+実行をコマンドで行う必要があるため、ほかの言語よりもさらにデバッグの有り難みが大きいのではないかと思います!

ちなみに、こちらの記事は初心者の方を対象としております。

結論M1Mac特有の問題についての結論はこちら!

スポンサーリンク

そもそもデバッグとは?

最初に簡単にデバッグとはどういったものか解説しておきます。

デバッグを一言で言えば、「実行を途中の行で停止し、その時点での変数の様子を確認できる」ものです。

例えば以下のように、6行目までで定義したa, b, cの中身が左側に表示されています。

VSCode上で簡単なC言語のプログラムのデバッグを行っている様子

これを確認することで意図しない結果に気付くことができるわけです。

また、パッと思いつくメリットはもう2つあります。

  • ショートカットキー1つで出来るので、コンパイル&実行の手間が省ける
  • segmentation faultのようなやっかいなエラーも検出してくれる。

特に2つ目のメリットは大きく、segmentation faultが出ても絶望せずに済みます

segmentation faultが出る時はprintデバッグができないため、デバッガーが使えると非常に良いことでしょう。

それではここから、具体的なデバッガーの導入方法を解説していきます!

全体の流れ

まずは全体の流れです!

デバッグ環境を整える流れ
  • デバッガーやコンパイラーのインストール
  • 「C/C++」の拡張機能インストール

    もちろんデバッグ用の拡張機能などもあります。

    ですが、個人的に拡張機能を大量に入れたくないので今回はこれを使っていきます!

    VSCodeのC/C++拡張機能
  • launch.jsonとtasks.jsonを作成する。
  • (ブレイクポイントを設定して)左上のメニューから「実行」>「デバッグの開始」

コンパイラー(clang)とデバッガー(lldb)のインストール

まずはコンパイラーとデバッガーのインストールです。

どちらもコマンドラインツールをインストールすることで使えるようになります。

clangとgccは別物らしいですが、これでgccコマンドを使えます。

コマンドラインツールとはXCodeに付属しているもので、ツールのみをインストールする時はターミナルで

xcode-select --install

を実行します。

XCodeごとApp Storeからインストールしても良いのですが、サイズが大きすぎるので……

clang(gcc)とlldbがインストールされているか確認する方法は、それぞれターミナルでgcc -v、clang -v、lldb -vとすればOKです。

インストールされていたら、以下のように出てくると思います。

//これはgcc -v

Apple clang version 14.0.0 (clang-1400.0.29.202)
Target: arm64-apple-darwin22.3.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
//これはlldb- v

lldb-1400.0.38.17
Apple Swift version 5.7.2 (swiftlang-5.7.2.135.5 clang-1400.0.29.51)

launch.jsonとtasks.jsonの設定

次にこの2つのファイルを設定していきます。手順は以下の通りです。

  1. 実行とデバッグのところにある「launch.jsonを作成します。」をクリック。
  2. エクスプローラーに戻ると、.vscodeの下にlaunch.jsonは自動で生成されている。
  3. 「新しいファイル」から新規ファイルを作成して、名前を「tasks.json」にする。

ちなみに、c_cpp_properties.jsonも自動で生成されたものです。

VSCodeでの、launch.jsonとtasks.jsonのファイル構成




左のサイドバー
.vscodeの下に2つあります。

以下に書いてあるlaunch.jsonとtasks.jsonはこちらのサイトを参考にしました。

参考VSCodeでMacOSにC言語デバッグ環境を構築

launch.json

{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "debug_c_test", //好きな名前を設定。
"type": "cppdbg",
"MIMode": "lldb",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"cwd": "${fileDirname}",
"preLaunchTask": "build_c_test",
"targetArchitecture": "arm64"
}
]
}

ここで重要なのが最後の“targetArchitecture”: “arm64”です。

M1/M2のようにAppleシリコンを搭載しているMacではアーキテクチャがarmになっているため、これを書かないとエラーが出る可能性があります。

最もこの記事を書く時に試したら書かなくてもデバッグができたので、アップデートで対応されたのかもしれませんが……。

tasks.json

{
"tasks": [
{
"type": "cppbuild",
"label": "build_c_test", //launch.jsonで設定したpreLaunchTaskに合わせる。
"command": "/usr/bin/gcc",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "デバッガーによって生成されたタスク。"
}
],
"version": "2.0.0"
}

あとはデバッグしたいファイルを開いた後にメニューの「実行」>「デバッグの開始」でデバッグをすることができます!

キーボードショートカットは「fn + F5」もしくは「F5」です。

今回のポイントとなったのはM1Macのアーキテクチャがarmであることでした。

これが影響して「ネットの通りにやったのに上手くいかない!」ということは非常によくあります。

何かがおかしいと思ったら、この部分を疑うと良いでしょう。

タイトルとURLをコピーしました