cmake + vscode + docker 远程调试linux程序

84 篇文章 0 订阅
57 篇文章 1 订阅

1.安装docker

首先下载docker

https://www.docker.com/get-started

2.编写dockerfile

FROM ubuntu:20.04
ENV DEBIAN_FRONTEND noninteractive

## Update cache and upgrade image
RUN apt-get -y update && apt-get -y upgrade && apt-get -y dist-upgrade

## Build environment packages
RUN apt-get install -qq -y --ignore-missing \
    openssh-server \
    libgtest-dev \
    libbenchmark-dev \
    libprotobuf-c-dev \
    libgrpc++-dev \
    rsync \
    clang  \
    vim \
    lsof  \
    gdb \
    supervisor \
	apt-utils		\
	automake		\
	bc                      \
	build-essential		\
	bzip2			\
	cmake			\
	curl			\
	git			\
	libcurl4-openssl-dev	\
	libssl-dev		\
	libtool-bin		\
	make			\
	pkg-config		\
	protobuf-compiler	\
	libprotobuf-dev         \
	libgmock-dev \
	man-db \
	python			\
	sudo			\
	tar			\
	zip			\
	unzip			\
	wget			\
	zlib1g-dev

## Install cmake since it's an expensive operation and best be done once
RUN mkdir -p /usr/local/bin
RUN mkdir -p /data/test
COPY ./setup-cmake.sh /usr/local/bin/setup-cmake.sh
RUN chmod +x /usr/local/bin/setup-cmake.sh
RUN /usr/local/bin/setup-cmake.sh

RUN mkdir -p /var/log/supervisor

# 修改root密码
RUN echo 'root:root' | chpasswd

#允许rootssh 登录
RUN sed -i "s/#PermitRootLogin no/PermitRootLogin yes/g" /etc/ssh/sshd_config
RUN sed -i "s/#PermitRootLogin prohibit-password/PermitRootLogin yes/g" /etc/ssh/sshd_config

RUN mkdir /var/run/sshd

#采用进程管理工具实现镜像run时自动启动ssh服务
COPY supervisord.conf /etc/supervisord.conf
#暴露22端口给宿主机

EXPOSE 22

#启动supervisord服务
CMD ["/usr/bin/supervisord"]

setup-cmake.sh

#!/bin/bash
#
# This script installs latest CMake on Linux machine
#
export PATH=/usr/local/bin:$PATH
# Min required CMake version
export CMAKE_MIN_VERSION=${1:-3.1.0}
# Target version to install if min required is not found
export CMAKE_VERSION=${2:-3.18.4}

UPGRADE_NEEDED=no

function splitVersion {
  pattern='([^0-9]*\([0-9]*\)[.]\([0-9]*\)[.]'
  v1=$(cut -d '.' -f 1 <<< $ver )
  v2=$(cut -d '.' -f 2 <<< $ver )
  v3=$(cut -d '.' -f 3 <<< $ver )
}

function checkVersion {
  # Current CMake version
  currVer=`cmake --version | grep version | cut -d' ' -f 3`
  ver=$currVer splitVersion
  cv1=$v1
  cv2=$v2
  cv3=$v3
  cv=`echo "65536*$v1+256*$v2+$v3" | bc`

  # New CMake version
  ver=$CMAKE_MIN_VERSION splitVersion
  nv=`echo "65536*$v1+256*$v2+$v3" | bc`
  if [ "$cv" -ge "$nv" ]; then
    echo "CMake is already installed: $currVer"
  else
    UPGRADE_NEEDED=yes
  fi
}

checkVersion

if [[ "$UPGRADE_NEEDED" == "no" ]]; then
  echo "Skipping CMake installation"
  exit 0
fi

# Download cmake to /tmp
pushd /tmp
if [[ ! -f "/tmp/cmake.tar.gz" ]]; then
  wget -O /tmp/cmake.tar.gz https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.tar.gz
  tar -zxvf /tmp/cmake.tar.gz
fi
# Bootstrap CMake
cd cmake-${CMAKE_VERSION}
./bootstrap --prefix=/usr/local
# Build CMake without CMake and without Ninja (slow)
make
make install
popd

supervisord.conf

[supervisord]

nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D

3.构建docker 镜像

构建docker

docker build -t opentem-ubuntu:v3 .

运行docker

docker run --security-opt seccomp=unconfined --name test -d -p 10022:22 -v /Users/zhanglei/project/:/data opentem-ubuntu:v3

4.安装要编译的源码

在 /Users/zhanglei/project/ 下载安装库源码

远程登录到docker的服务器

ssh root@127.0.0.1 -p 10022

安装grpc

git clone git@github.com:grpc/grpc.git

cd grpc

git submodule update --init --recursive

mkdir build

cd build

cmake ..

make -j4

make install

安装opentelemetry

https://github.com/open-telemetry/opentelemetry-cpp.git

cd opentelemetry-cpp

git submodule update --init --recursive

mkdir build

cd build

cmake -DWITH_OTLP=ON  -DWITH_PROMETHEUS=ON ..

make -j4

make install 

5.使用xcode 远程开发

cmakelists.txt配置,主要是帮助gdb找到符号表

cmake_minimum_required(VERSION 3.0.0)
project(demo VERSION 0.1.0)
IF (CMAKE_COMPILER_IS_GNUCC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread")
ENDIF (CMAKE_COMPILER_IS_GNUCC)

SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
add_definitions("-Wall -g")
add_executable(demo main.cc)

launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "demo",
            "type": "cppdbg",
            "request": "launch",
            "program": "${command:cmake.launchTargetPath}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

可以调试了:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用CMakeVSCode进行项目配置和开发的步骤: 1. 首先,确保已经安装了CMakeVSCode。可以使用以下命令来检查它们的安装情况: ```shell cmake --version code --version ``` 2. 打开VSCode,并安装以下插件:C/C++、CMakeCMake Tools。可以在VSCode的扩展商店中搜索并安装这些插件。 3. 创建一个新的文件夹作为你的项目文件夹,并在该文件夹中创建一个CMakeLists.txt文件。这个文件将用于配置你的项目。 4. 在CMakeLists.txt文件中,编写CMake的配置指令。例如,你可以指定项目的名称、源文件、编译选项等。以下是一个简单的示例: ```cmake cmake_minimum_required(VERSION 3.10) project(MyProject) set(CMAKE_CXX_STANDARD 11) add_executable(MyProject main.cpp) ``` 5. 在VSCode中打开你的项目文件夹。然后,点击左侧的“CMake”图标,它将打开一个侧边栏,显示CMake工具的选项。 6. 在CMake工具的侧边栏中,点击“Configure”按钮。它将提示你选择一个工具链,例如GCC或Clang。选择你想要使用的工具链,并等待配置过程完成。 7. 配置完成后,点击“Build”按钮来构建你的项目。构建过程将在终端中显示,并生成可执行文件。 8. 如果构建成功,你可以点击“Run”按钮来运行你的项目。它将在终端中显示程序的输出结果。 9. 在开发过程中,你可以使用VSCode调试功能来调试你的项目。点击左侧的“调试”图标,然后点击“启动调试”按钮。它将在VSCode中启动一个调试会话,并允许你设置断点、单步执行等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值