LoginSignup
4
1

More than 5 years have passed since last update.

Visual Studio 2017 Linux C++ ワークロードをDockerでデバッグ

Last updated at Posted at 2018-12-13

バージョン

Visual Studio 2017: 15.9.4
Docker for Windows: Engine: 18.09.0 Compose: 1.23.2

Linux C++ ワークロード

Visual Studio 2017でLinuxターゲットのC++プロジェクトが作れてしまう、クロスプラットフォームな奴。Linuxといいつつ実際はGNUツールチェインが相手なので、Linuxカーネルでなくても使えそう。
SSHでつないでgcc-g++とgdbserverを叩く。

元のDockerイメージ

私のターゲットがAWS Lambdaなので、quiltdata/lambda

Dockerfile

公開鍵認証でログインしたいところが、Visual Studio 2017の15.9.4はこのバグが再発している模様なので、パスワードでログインする。
たくさんyum installするので時間がかかる。

FROM quiltdata/lambda

ARG USER

RUN yum -y update && yum -y install openssh-server && yum -y install sudo && yum -y install passwd && yum -y install gdb-gdbserver && yum -y install gcc-c++ && yum -y install gdb
RUN adduser $USER && echo abcd | passwd --stdin $USER
RUN echo "$USER ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
RUN sed -ri 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config

CMD /etc/init.d/sshd start && tail -f /dev/null

docker-compose.yml

SSHのポートは2022にフォワーディング。SYS_PTRACEはgdbに必要。

docker-compose.yml
version: '2'
services:
    app:
        build:
            context: .
            args:
                USER: user1
        container_name: lambda
        stdin_open: true
        tty: true
        ports:
            - "2022:22"
        volumes:
            - .:/share
        cap_add:
            - SYS_PTRACE
        security_opt:
            - seccomp:unconfined

Dockerイメージのビルド・実行

Dockerfileとdocker-compose.ymlを同じフォルダに入れて、そのフォルダにcdしてdocker-compose build
起こすときはそのフォルダでdocker-compose up -d
寝かすときはそのフォルダでdocker-compose stop

Linux C++ワークロードプロジェクトのリモートデバッグ

Visual Studioのツール→オプション→クロスプラットフォーム→接続マネージャーでSSH接続を追加する。ポートは2022、ユーザ名はuser1、パスワードはabcd。
SSH接続は問題なく作れたのにリモート実行できないときは、ソリューションのリビルド。

参考

amazon linuxのイメージを使用してsshできるコンテナを作る
Build Lambda deployment packages faster with Docker

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1