Help us understand the problem. What is going on with this article?

【Rust】VSCodeを使ったDockerコンテナ上のRustアプリケーションをデバッグする方法

はじめに

最近Rustを触り始めて、コンパイラに怒られる日々を送っているTomoProgです。
この記事ではVSCodeを使い、Dockerコンテナ上で構築したRustアプリケーションをデバッグする方法を説明します。

この記事の対象者

  • Docker上のRustアプリケーションのデバッグ方法を知りたい方

前提

Rustアプリケーションが起動するDockerコンテナが起動していることを前提に話を進めます。
こちらの記事を参考にする場合はDockerコンテナを起動した状態で試してみてください。

筆者の環境

筆者がデバッグ環境を構築した際の環境を載せておきます。
この環境通りでなくても、VSCodeとDockerがインストールされていれば構築できると思いますので、試してみてください。

  • OS
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS"
  • VSCode
$ code -v
1.47.2
  • Docker
docker -v
Docker version 19.03.12, build 48a66213fe

VSCodeからDockerコンテナに接続する

まずはVSCodeからDockerコンテナに接続できるようにします。
Dockerコンテナへの接続にはRemote-Containersという拡張機能を使います。
Remote-ContainersVSCode Remote Developmentの機能の1つで、この拡張機能を使うことで、Dockerコンテナ内のファイルを直接操作できたり、VSCodeの拡張機能をコンテナ内にインストールできるようになります。
image.png
インストールが終わると画像のように画面の左下に緑色のアイコンが追加されます。
image.png
このアイコンを押すと、Remote-Containersのメニューが表示されるので、Attach to Running Container...を選択します。
image.png
選択すると起動しているDockerコンテナが表示されますので、Rustアプリケーションが起動しているDockerコンテナを選択しましょう。
image.png
VSCodeが新しく立ち上がり、左下の緑色のアイコンが選択したコンテナになっていれば接続成功です。
image.png
もし、以下のようなメッセージが出た場合はdockerコマンドをsudoなしで使用できるようにする必要があります。こちらを参照し設定してみてください。
image.png

Docker上のRustアプリケーションがあるフォルダを開く

次はRustアプリケーションがあるフォルダを開きます。
VSCodeのエクスプローラからフォルダーを開くを選択し、Dockerコンテナ内のRustアプリケーションのフォルダを指定します。
筆者の環境では/work/hello/がRustアプリケーションのフォルダなのでここを指定しています。
image.png
画像のように指定したフォルダの中身がVSCodeのエクスプローラに表示されれば完了です。
image.png

デバッガをインストールする

次はデバッガをインストールしていきます。
デバッガにはCodeLLDBという拡張機能を使います。
CodeLLDBLLDBというデバッガをVSCodeで利用できるようにする拡張機能です。
image.png

インストール完了後、インストールされている拡張機能を確認し、画像のようにLOCALではなくCONTAINERの方にCodeLLDBがインストールされていればデバッガのインストールは完了です。
image.png

launch.jsonを作成する

LLDBを使用したデバッグができるようにlaunch.jsonを作成します。
実行タブを開き、launch.jsonファイルを作成しますを選択し、LLDBを選択します。
image.png
Cargo.tomlが存在すると以下のようなメッセージが表示されるため、「はい」を選択します。
image.png
「いいえ」を選択してもlaunch.jsonは作成されますが、「はい」にすると環境に適したlaunch.jsonを自動で作成してくれるため、非常に便利です。
この記事では「はい」を押して自動生成されたlaunch.jsonを使用しています。

画像のようにエディタにlaunch.jsonが表示されれば作成完了です。
image.png

ここまで設定すればデバッグ環境の構築は完了です。

デバッグする

それでは早速デバッグしてみましょう。
プログラムを一時停止したいところにブレークポイントを設定し、画像左上の再生ボタンを押せばデバッグが始まります。
ブレークポイントはエディタの行番号の少し左をクリックすると、画像のように赤い丸が表示されます。
image.png
画像のように設定したブレークポイントの位置でプログラムが止まれば成功です!
image.png
あとはウォッチ式に変数を追加したり、ステップ実行してみたり色々試してみてください。

まとめ

VSCodeを使ってDockerコンテナ上のRustアプリケーションのデバッグ方法をまとめました。
Dockerコンテナ上のデバッグは何かと面倒なイメージでしたが、VSCode Remote Developmentが登場したことにより、かなり簡単に設定できるようになり感動しました。

それでは良いRustライフを!

TomoProg

TomoProg
社会人7年目のプログラマーです。 株式会社ネオジニアにて日々勉強中!!
http://tomoprog.hatenablog.com/
neogenia
大阪のシステム開発会社です!
https://www.neogenia.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした