Hi there,

I’m really happy to hear that you managed to work this out for yourself, and 
thanks a lot for posting your solution! I’m sure that will be very useful to 
our other Visual Studio users in the future.

Best,
Jean-Paul

> On 08 Aug 2018, at 17:07, 程迪 <chengdi123...@gmail.com> wrote:
> 
> 
> Hi everyone,
> 
> I just figured it out. According to 
> https://github.com/Microsoft/VSLinux/issues/272 ,the intellisense works if 
> CMakeSettings.json file is like this: 
> {
>     // See https://go.microsoft.com//fwlink//?linkid=834763 for more 
> information about this file.
>     "environments": [
>         {
>             "environment": "IS_includes", // this is used for intelliSense
>             // ${env.USERPROFILE} == c:\Users\<userName>
>             // ${env.LOCALAPPDATA} == c:\Users\<userName>\AppData\Local
>             "INCLUDE": 
> "${env.INCLUDE};${env.USERPROFILE}\\dealII\\dealii_lib\\include;${env.LOCALAPPDATA}\\Microsoft\\Linux\\Header
>  Cache\\1.0\\919434520\\usr\\include"
>         }
>     ],
>     "configurations": [
>         {
>             "name": "Linux-Debug",
>             "generator": "Unix Makefiles",
>             "remoteMachineName": "192.168.99.100",
>             "configurationType": "Debug",
>             "remoteCMakeListsRoot": "/var/tmp/src/${workspaceHash}/${name}",
>             "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",
>             "remoteCopySourcesMethod": "sftp",
>             "remoteCopyBuildOutput": true,
>             "cmakeCommandArgs": "",
>             "buildCommandArgs": "",
>             "ctestCommandArgs": "",
>             "inheritEnvironments": [ "linux_x64", "IS_includes" ]
>         },
> 
> 
> 
> On Wednesday, August 8, 2018 at 1:09:58 AM UTC-4, 程迪 wrote:
> 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
>  
> <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 
> <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 <http://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 
> <http://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/ 
> <http://www.dealii.org/>
> For mailing list/forum options, see 
> https://groups.google.com/d/forum/dealii?hl=en 
> <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 dealii+unsubscr...@googlegroups.com 
> <mailto:dealii+unsubscr...@googlegroups.com>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
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 dealii+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to