Hi, everyone. I am trying to use visual studio 2017 linux dev workloads to compile and debug tutorial step1 remotely on docker container. I want to use intellisense of vs to help me. But I cannot figure out how.
Here is my steps: 1. I followed (https://docs.microsoft.com/en-us/cpp/linux/download-install-and-setup-the-linux-development-workload) to install and configured visual studio 2017 CE 2. I installed docker engine on windows using virtualbox and boot2docker. And I recreated the docker machine to use more cpus. # stop`default` docker machine docker-machine stop default # delet`default` docker machine,and all images docker-machine rm default # create `default` docker machine docker-machine create -d virtualbox --virtualbox-cpu-count=4 --virtualbox-memory=4096 --virtualbox-disk-size=50000 default # Restart docker docker-machine stop exit 3. create a docker container: docker run --name dealii_vs -w /home/dealii -i -t -d -v /c/Users/cheng:/home/dealii/shared -p 192.168.99.100:8022:22 -p 192.168.99.100:8023-8025:8023-8025 --cap-add=SYS_PTRACE dealii/dealii:latest # --cap-add=SYS_PTRACE is necessary for gdbserver. docker exec -u root -it dealii_vs bash # use root to do something inside 4. configure inside of the docker container apt-get update apt-get install openssh-server gdb gdbserver zip vim-nox -y # download some software, vim-nox is not necessary. # newer cmake, vs2017 need cmake 3.8+ wget https://cmake.org/files/v3.12/cmake-3.12.0-Linux-x86_64.sh # install to /opt/cmake/3.12.0 mkdir -p /opt/cmake/3.12.0 ./cmake-3.12.0-Linux-x86_64.sh --skip-license --prefix=/opt/cmake/3.12.0 --exclude-subdir # modify sshd to auto load some env_vars. # vs 2017 is using ssh to run commands remotely in `non-interactive` shell, which won't load `~/.bashrc` or docker's `ENV` # however, opensshd has an option to load some env_vars even in `non-interactive` shell cat >>/etc/ssh/sshd_config <<EOF # add by Di Cheng PermitUserEnvironment yes EOF # add environment variable, almost identical to output of `docker exec dealii_vs env` mkdir -p /home/dealii/.ssh touch /home/dealii/.ssh/environment cat >/home/dealii/.ssh/environment <<EOF LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8 HOME=/home/dealii USER=dealii CC=mpicc CXX=mpicxx FC=mpif90 FF=mpif77 ARPACK_DIR=/home/dealii/libs/arpack-ng-master HDF5_DIR=/home/dealii/libs/hdf5-1.8.15-patch1 OPENCASCADE_DIR=/home/dealii/libs/oce-OCE-0.17 P4EST_DIR=/home/dealii/libs/p4est-2.0 METIS_DIR=/home/dealii/libs/parmetis-4.0.3 PARMETIS_DIR=/home/dealii/libs/parmetis-4.0.3 PETSC_DIR=/home/dealii/libs/petsc-3.6.4 SLEPC_DIR=/home/dealii/libs/slepc-3.6.0 SUPERLU_DIR=/home/dealii/libs/superlu_dist_5.1.2 TRILINOS_DIR=/home/dealii/libs/trilinos-release-12-10-1 DEAL_II_DIR=/home/dealii/dealii-master PATH=/opt/cmake/3.12.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin EOF # cat /home/dealii/.ssh/environment echo "dealii:dealii" | chpasswd # modify password apt-get clean # clean for docker commit service ssh start #start sshd exit # return to windows 5. I tried to use cmake plugins of vs2017. It works. I can compile and debug step by step. But a lot of modification to the VSC-like json configuration files is needed. But I do not like cmake very much because it hides a lot of things. { # sample CMakeSettings.json "name": "Linux-Debug", "generator": "Unix Makefiles", # use first one in Tools>Options>CrossPlatform>ConnectionManager by default. "remoteMachineName": "192.168.99.100", "configurationType": "Debug", "remoteCMakeListsRoot": "/var/tmp/src/${workspaceHash}/${name}", # cmake location "cmakeExecutable": "/opt/cmake/3.12.0/bin/cmake", "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", "remoteBuildRoot": "/var/tmp/build/${workspaceHash}/build/${name}", "remoteInstallRoot": "/var/tmp/build/${workspaceHash}/install/${name}", "remoteCopySources": true, "remoteCopySourcesOutputVerbosity": "Normal", "remoteCopySourcesConcurrentCopies": "10", # rsync is buggy, use sftp "remoteCopySourcesMethod": "sftp", "remoteCopyBuildOutput": false, # pass -DDEAL_II_DIR=/home/dealii/dealii-master here or pass it by `~/.ssh/environment` "cmakeCommandArgs": "", "buildCommandArgs": "", "ctestCommandArgs": "", "inheritEnvironments": [ "linux_x64" ] }, 6. I tried to figure out what header and libs dealii tutorial code is using, however, OMG: $ make VERBOSE=1 /usr/bin/cmake -H/home/dealii/shared/dealII/examples/step-1 -B/home/dealii/shared/dealII/examples/step-1 --check-build-system CMakeFiles/Makefile.cmake 0 /usr/bin/cmake -E cmake_progress_start /home/dealii/shared/dealII/examples/step-1/CMakeFiles /home/dealii/shared/dealII/examples/step-1/CMakeFiles/progress.marks make -f CMakeFiles/Makefile2 all make[1]: Entering directory '/home/dealii/shared/dealII/examples/step-1' make -f CMakeFiles/step-1.dir/build.make CMakeFiles/step-1.dir/depend make[2]: Entering directory '/home/dealii/shared/dealII/examples/step-1' cd /home/dealii/shared/dealII/examples/step-1 && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/dealii/shared/dealII/examples/step-1 /home/dealii/shared/dealII/examples/step-1 /home/dealii/shared/dealII/examples/step-1 /home/dealii/shared/dealII/examples/step-1 /home/dealii/shared/dealII/examples/step-1/CMakeFiles/step-1.dir/DependInfo.cmake --color= make[2]: Leaving directory '/home/dealii/shared/dealII/examples/step-1' make -f CMakeFiles/step-1.dir/build.make CMakeFiles/step-1.dir/build make[2]: Entering directory '/home/dealii/shared/dealII/examples/step-1' [ 50%] Building CXX object CMakeFiles/step-1.dir/step-1.cc.o /usr/bin/mpicxx -DDEBUG -DTBB_DO_ASSERT=1 -DTBB_USE_DEBUG -isystem /home/dealii/dealii-master/include -isystem /home/dealii/dealii-master/include/deal.II/bundled -isystem /usr/lib/openmpi/include/openmpi/opal/mca/event/libevent2021/libevent -isystem /usr/lib/openmpi/include/openmpi/opal/mca/event/libevent2021/libevent/include -isystem /usr/lib/openmpi/include -isystem /usr/lib/openmpi/include/openmpi -isystem /home/dealii/libs/parmetis-4.0.3/include -isystem /home/dealii/libs/trilinos-release-12-10-1/include -isystem /home/dealii/libs/superlu_dist_5.1.2/include -isystem /home/dealii/libs/petsc-3.6.4/include -isystem /home/dealii/libs/hdf5-1.8.15-patch1/include -isystem /home/dealii/libs/p4est-2.0/FAST/include -isystem /home/dealii/libs/slepc-3.6.0/include -pedantic -fPIC -Wall -Wextra -Wpointer-arith -Wwrite-strings -Wsynth -Wsign-compare -Wswitch -Woverloaded-virtual -Wno-literal-suffix -fopenmp-simd -std=c++14 -std=c++14 -Wno-parentheses -Wno-unused-local-typedefs -Og -ggdb -Wa,--compress-debug-sections -o CMakeFiles/step-1.dir/step-1.cc.o -c /home/dealii/shared/dealII/examples/step-1/step-1.cc [100%] Linking CXX executable step-1 /usr/bin/cmake -E cmake_link_script CMakeFiles/step-1.dir/link.txt --verbose=1 /usr/bin/mpicxx -rdynamic -Wl,-rpath -Wl,/usr/lib/openmpi/lib -Wl,--enable-new-dtags -ggdb CMakeFiles/step-1.dir/step-1.cc.o -o step-1 -rdynamic /home/dealii/dealii-master/lib/libdeal_II.g.so.9.0.0-pre /home/dealii/libs/p4est-2.0/DEBUG/lib/libp4est.so /home/dealii/libs/p4est-2.0/DEBUG/lib/libsc.so -lz /home/dealii/libs/trilinos-release-12-10-1/lib/libmuelu-adapters.so /home/dealii/libs/trilinos-release-12-10-1/lib/libmuelu-interface.so /home/dealii/libs/trilinos-release-12-10-1/lib/libmuelu.so /home/dealii/libs/trilinos-release-12-10-1/lib/libteko.so /home/dealii/libs/trilinos-release-12-10-1/lib/libstratimikos.so /home/dealii/libs/trilinos-release-12-10-1/lib/libstratimikosbelos.so /home/dealii/libs/trilinos-release-12-10-1/lib/libstratimikosaztecoo.so /home/dealii/libs/trilinos-release-12-10-1/lib/libstratimikosamesos.so /home/dealii/libs/trilinos-release-12-10-1/lib/libstratimikosml.so /home/dealii/libs/trilinos-release-12-10-1/lib/libstratimikosifpack.so /home/dealii/libs/trilinos-release-12-10-1/lib/libifpack2-adapters.so /home/dealii/libs/trilinos-release-12-10-1/lib/libifpack2.so /home/dealii/libs/trilinos-release-12-10-1/lib/libanasazitpetra.so /home/dealii/libs/trilinos-release-12-10-1/lib/libModeLaplace.so /home/dealii/libs/trilinos-release-12-10-1/lib/libanasaziepetra.so /home/dealii/libs/trilinos-release-12-10-1/lib/libanasazi.so /home/dealii/libs/trilinos-release-12-10-1/lib/libamesos2.so /home/dealii/libs/trilinos-release-12-10-1/lib/libbelostpetra.so /home/dealii/libs/trilinos-release-12-10-1/lib/libbelosepetra.so /home/dealii/libs/trilinos-release-12-10-1/lib/libbelos.so /home/dealii/libs/trilinos-release-12-10-1/lib/libml.so /home/dealii/libs/trilinos-release-12-10-1/lib/libifpack.so /home/dealii/libs/trilinos-release-12-10-1/lib/libzoltan2.so /home/dealii/libs/trilinos-release-12-10-1/lib/libpamgen_extras.so /home/dealii/libs/trilinos-release-12-10-1/lib/libpamgen.so /home/dealii/libs/trilinos-release-12-10-1/lib/libamesos.so /home/dealii/libs/trilinos-release-12-10-1/lib/libgaleri-xpetra.so /home/dealii/libs/trilinos-release-12-10-1/lib/libgaleri-epetra.so /home/dealii/libs/trilinos-release-12-10-1/lib/libaztecoo.so /home/dealii/libs/trilinos-release-12-10-1/lib/libisorropia.so /home/dealii/libs/trilinos-release-12-10-1/lib/libxpetra-sup.so /home/dealii/libs/trilinos-release-12-10-1/lib/libxpetra.so /home/dealii/libs/trilinos-release-12-10-1/lib/libthyratpetra.so /home/dealii/libs/trilinos-release-12-10-1/lib/libthyraepetraext.so /home/dealii/libs/trilinos-release-12-10-1/lib/libthyraepetra.so /home/dealii/libs/trilinos-release-12-10-1/lib/libthyracore.so /home/dealii/libs/trilinos-release-12-10-1/lib/libepetraext.so /home/dealii/libs/trilinos-release-12-10-1/lib/libtpetraext.so /home/dealii/libs/trilinos-release-12-10-1/lib/libtpetrainout.so /home/dealii/libs/trilinos-release-12-10-1/lib/libtpetra.so /home/dealii/libs/trilinos-release-12-10-1/lib/libkokkostsqr.so /home/dealii/libs/trilinos-release-12-10-1/lib/libtpetrakernels.so /home/dealii/libs/trilinos-release-12-10-1/lib/libtpetraclassiclinalg.so /home/dealii/libs/trilinos-release-12-10-1/lib/libtpetraclassicnodeapi.so /home/dealii/libs/trilinos-release-12-10-1/lib/libtpetraclassic.so /home/dealii/libs/trilinos-release-12-10-1/lib/libtriutils.so /home/dealii/libs/trilinos-release-12-10-1/lib/libzoltan.so /home/dealii/libs/trilinos-release-12-10-1/lib/libepetra.so /home/dealii/libs/trilinos-release-12-10-1/lib/libsacado.so /home/dealii/libs/trilinos-release-12-10-1/lib/librtop.so /home/dealii/libs/trilinos-release-12-10-1/lib/libteuchoskokkoscomm.so /home/dealii/libs/trilinos-release-12-10-1/lib/libteuchoskokkoscompat.so /home/dealii/libs/trilinos-release-12-10-1/lib/libteuchosremainder.so /home/dealii/libs/trilinos-release-12-10-1/lib/libteuchosnumerics.so /home/dealii/libs/trilinos-release-12-10-1/lib/libteuchoscomm.so /home/dealii/libs/trilinos-release-12-10-1/lib/libteuchosparameterlist.so /home/dealii/libs/trilinos-release-12-10-1/lib/libteuchoscore.so /home/dealii/libs/trilinos-release-12-10-1/lib/libkokkosalgorithms.so /home/dealii/libs/trilinos-release-12-10-1/lib/libkokkoscontainers.so /home/dealii/libs/trilinos-release-12-10-1/lib/libkokkoscore.so /home/dealii/libs/superlu_dist_5.1.2/lib/libsuperlu_dist.so /home/dealii/libs/arpack-ng-master/lib/libarpack.so -lrt -lgsl -lgslcblas /home/dealii/libs/hdf5-1.8.15-patch1/lib/libhdf5_hl.so /home/dealii/libs/hdf5-1.8.15-patch1/lib/libhdf5.so -lnetcdf_c++ -lnetcdf -lc /home/dealii/libs/slepc-3.6.0/lib/libslepc.so /home/dealii/libs/petsc-3.6.4/lib/libpetsc.so /home/dealii/libs/petsc-3.6.4/lib/libHYPRE.a /home/dealii/libs/petsc-3.6.4/lib/libcmumps.a /home/dealii/libs/petsc-3.6.4/lib/libdmumps.a /home/dealii/libs/petsc-3.6.4/lib/libsmumps.a /home/dealii/libs/petsc-3.6.4/lib/libzmumps.a /home/dealii/libs/petsc-3.6.4/lib/libmumps_common.a /home/dealii/libs/petsc-3.6.4/lib/libpord.a /home/dealii/libs/petsc-3.6.4/lib/libscalapack.a -llapack -lblas /home/dealii/libs/parmetis-4.0.3/lib/libparmetis.so /home/dealii/libs/parmetis-4.0.3/lib/libmetis.so -lhwloc -lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -lgfortran -lquadmath -lm -lmpi_cxx -lmpi -lpthread -ldl -Wl,-rpath,/home/dealii/dealii-master/lib:/home/dealii/libs/p4est-2.0/DEBUG/lib:/home/dealii/libs/trilinos-release-12-10-1/lib:/home/dealii/libs/superlu_dist_5.1.2/lib:/home/dealii/libs/arpack-ng-master/lib:/home/dealii/libs/hdf5-1.8.15-patch1/lib:/home/dealii/libs/slepc-3.6.0/lib:/home/dealii/libs/petsc-3.6.4/lib:/home/dealii/libs/parmetis-4.0.3/lib make[2]: Leaving directory '/home/dealii/shared/dealII/examples/step-1' [100%] Built target step-1 make[1]: Leaving directory '/home/dealii/shared/dealII/examples/step-1' /usr/bin/cmake -E cmake_progress_start /home/dealii/shared/dealII/examples/step-1/CMakeFiles 0 and I found the libraries are so huge, especially the debug lib: root@a9f8aab1d09c:~/dealii-master/lib# ll -h total 1.8G drwxr-xr-x 3 dealii dealii 4.0K Mar 15 00:15 ./ drwxr-xr-x 5 dealii dealii 4.0K Mar 15 00:19 ../ drwxr-xr-x 3 dealii dealii 4.0K Mar 15 00:15 cmake/ lrwxrwxrwx 1 dealii dealii 25 Mar 15 00:15 libdeal_II.g.so -> libdeal_II.g.so.9.0.0-pre -rw-r--r-- 1 dealii dealii *1.6G* Mar 15 00:15 libdeal_II.g.so.9.0.0-pre lrwxrwxrwx 1 dealii dealii 23 Mar 15 00:15 libdeal_II.so -> libdeal_II.so.9.0.0-pre -rw-r--r-- 1 dealii dealii 172M Mar 15 00:14 libdeal_II.so.9.0.0-pre I doubt if this is a good practice? My problem: How to parse the dealii code using intellisense remotely? I would like to compile the project using traditional way and I want to use intellisense of vs 2017 to give me more information when I am debugging. <https://lh3.googleusercontent.com/-C2drv3PCnEM/W2pv_kCb-ZI/AAAAAAAAGok/i4hha1HXSxczZyRyyob_sNbGil1VNHDLQCLcBGAs/s1600/Capture.PNG> But why a simple tutorial used so many libraries? it loads 106 libraries! <https://lh3.googleusercontent.com/-1q0MNg157g4/W2px7t64NyI/AAAAAAAAGow/4tFPCwyhI1klamM-Im1ypTW7_JJwEBt6gCLcBGAs/s1600/Capture.PNG> -- The deal.II project is located at http://www.dealii.org/ For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en --- You received this message because you are subscribed to the Google Groups "deal.II User Group" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
