前がき
Macのローカル環境でC++のデバック環境を構築しようとしたが、起動はできるもののvector
の配列の中身が見れなかったりCLionを使ったデバック方法がかなり少なかったためこの記事を書くことを決めました。
環境
- MacOS Catallina 10.15.4
- CLion 2020
- Docker for mac
試したこと
- visual studioを使ったデバック
- gdbをソースからビルドしてローカル環境にいれ、Debuggerに指定してbuild
- lldbを使ったデバック
などです。結論から言うと全部自分が想定した通りに動きませんでした。標準入力ができなかったりステップが実行できなかったりです。
※ちなみにWindows環境ですとすぐに動きました。
not in executable format: File format not recognized
こちらのエラーが解消できました。
実現できた方法
Windowsで実装した方法とは別にGDB Serverをローカル環境内で構築して通信したらできるのでは?と考えたやってみた結果うまくいきました。
下記手順を記載します。
1. DockerでGDBServerを構築
- DockerFileは下記となります
FROM ubuntu:18.04
RUN apt update \
&& apt upgrade -y \
&& apt install -y \
apt-utils build-essential clang cmake gdb gdbserver openssh-server rsync
# Taken from - https://docs.docker.com/engine/examples/running_ssh_service/#environment-variables
RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
# 22 for ssh server. 7777 for gdb server.
EXPOSE 22 7777
# Create dev user with password 'dev'
RUN useradd -ms /bin/bash dev
RUN echo 'dev:dev' | chpasswd
# Upon start, run ssh daemon
CMD ["/usr/sbin/sshd", "-D"]
コンテナを起動していることを確認したら、大丈夫です。
2. CLionの設定
Preferences-> toolchainsdで各設定をします。
3. CmakeListの読み込み直す
意外とハマりポイントでした。すでに cmake-build-debug
がある人は一度削除して、もう一度読み込み直すようにした方がいいです。
4.虫眼鏡を押して実行するだけ
参考にした記事