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.

Reply via email to