diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py
index 9570610cd8dc2871d886ca57c42e6af5283f9ed7..b8dc8b32fbf79bc5d9559a64a672acb79484c09e 100644
--- a/ci-scripts/cls_containerize.py
+++ b/ci-scripts/cls_containerize.py
@@ -579,9 +579,17 @@ class Containerize():
 			lUserName = self.eNB2UserName
 			lPassWord = self.eNB2Password
 		lSsh.open(lIpAddr, lUserName, lPassWord)
-		lSsh.command('docker save ' + self.imageToCopy + ':' + imageTag + ' | gzip > ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
-		lSsh.copyin(lIpAddr, lUserName, lPassWord, '~/' + self.imageToCopy + '-' + imageTag + '.tar.gz', '.')
+		lSsh.command('docker save ' + self.imageToCopy + ':' + imageTag + ' | gzip --fast > ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
+		ret = lSsh.copyin(lIpAddr, lUserName, lPassWord, '~/' + self.imageToCopy + '-' + imageTag + '.tar.gz', '.')
+		if ret != 0:
+			HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ALL_PROCESSES_OK)
+			self.exitStatus = 1
+			return False
 		lSsh.command('rm ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
+		if lSsh.getBefore().count('cannot remove'):
+			HTML.CreateHtmlTestRow('file not created by docker save', 'KO', CONST.ALL_PROCESSES_OK)
+			self.exitStatus = 1
+			return False
 		lSsh.close()
 
 		# Going to the Test Server
@@ -599,15 +607,26 @@ class Containerize():
 			lPassWord = self.eNB2Password
 		lSsh.open(lIpAddr, lUserName, lPassWord)
 		lSsh.copyout(lIpAddr, lUserName, lPassWord, './' + self.imageToCopy + '-' + imageTag + '.tar.gz', '~')
+		# copyout has no return code and will quit if something fails
 		lSsh.command('docker rmi ' + self.imageToCopy + ':' + imageTag, '\$', 10)
 		lSsh.command('docker load < ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
+		if lSsh.getBefore().count('o such file') or lSsh.getBefore().count('invalid tar header'):
+			logging.debug(lSsh.getBefore())
+			HTML.CreateHtmlTestRow('problem during docker load', 'KO', CONST.ALL_PROCESSES_OK)
+			self.exitStatus = 1
+			return False
 		lSsh.command('rm ' + self.imageToCopy + '-' + imageTag + '.tar.gz', '\$', 60)
+		if lSsh.getBefore().count('cannot remove'):
+			HTML.CreateHtmlTestRow('file not copied during scp?', 'KO', CONST.ALL_PROCESSES_OK)
+			self.exitStatus = 1
+			return False
 		lSsh.close()
 
 		if os.path.isfile('./' + self.imageToCopy + '-' + imageTag + '.tar.gz'):
 			os.remove('./' + self.imageToCopy + '-' + imageTag + '.tar.gz')
 
 		HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
+		return True
 
 	def DeployObject(self, HTML, EPC):
 		if self.eNB_serverId[self.eNB_instance] == '0':
@@ -683,6 +702,9 @@ class Containerize():
 		logging.debug(' -- ' + str(unhealthyNb) + ' unhealthy container(s)')
 		logging.debug(' -- ' + str(startingNb) + ' still starting container(s)')
 
+		self.testCase_id = HTML.testCase_id
+		self.eNB_logFile[self.eNB_instance] = 'enb_' + self.testCase_id + '.log'
+
 		status = False
 		if healthyNb == 1:
 			cnt = 0
@@ -697,11 +719,12 @@ class Containerize():
 					status = True
 					logging.info('\u001B[1m Deploying OAI object Pass\u001B[0m')
 					time.sleep(10)
+		else:
+			# containers are unhealthy, so we won't start. However, logs are stored at the end
+			# in UndeployObject so we here store the logs of the unhealthy container to report it
+			mySSH.command('docker logs ' + containerName + ' > ' + lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '\$', 30)
 		mySSH.close()
 
-		self.testCase_id = HTML.testCase_id
-		self.eNB_logFile[self.eNB_instance] = 'enb_' + self.testCase_id + '.log'
-
 		if status:
 			HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
 		else:
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index baed6a6011981f13d8f1885c78065836cb8967f1..8a4b59ede650e662ddf40a857f7b1769957eea0f 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -921,7 +921,9 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
 				elif action == 'Build_Proxy':
 					CONTAINERS.BuildProxy(HTML)
 				elif action == 'Copy_Image_to_Test':
-					CONTAINERS.Copy_Image_to_Test_Server(HTML)
+					success = CONTAINERS.Copy_Image_to_Test_Server(HTML)
+					if not success:
+						RAN.prematureExit = True
 				elif action == 'Deploy_Object':
 					CONTAINERS.DeployObject(HTML, EPC)
 					if CONTAINERS.exitStatus==1:
diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper
index d35f90fcce20a1f9c66e3470c013d1f0b65bcac8..608ace04863c584f45e240bc661d3bf238a7830a 100755
--- a/cmake_targets/tools/build_helper
+++ b/cmake_targets/tools/build_helper
@@ -237,8 +237,9 @@ compilations() {
      echo_error "$2 compilation failed"
      exit 1
   fi
-  if [ -s $3 ] ; then
-     cp $3 $4
+  if [ -s "$3" ] ; then
+     rm -f "$4"
+     ln -s "$PWD/$3" "$4"
      echo_success "$2 compiled"
      check_warnings "$dlog/$2.$REL.txt"
   else
diff --git a/docker/Dockerfile.eNB.rhel8.2 b/docker/Dockerfile.eNB.rhel8.2
index 5296ac21726320bc65c1b847b2aef2d6fd6db0bd..23afb5f38d8aff027dbd76082255150602324646 100644
--- a/docker/Dockerfile.eNB.rhel8.2
+++ b/docker/Dockerfile.eNB.rhel8.2
@@ -43,6 +43,7 @@ RUN yum update -y && \
         tzdata \
         procps-ng \
         atlas \
+        gdb \
         python3 \
         python3-pip \
         net-tools \
diff --git a/docker/Dockerfile.eNB.ubuntu18 b/docker/Dockerfile.eNB.ubuntu18
index f95a03398a1dbae54847536761ce06cb18053969..2b50dcadfbe1e0b327d9a0beb2a60940aabc287e 100644
--- a/docker/Dockerfile.eNB.ubuntu18
+++ b/docker/Dockerfile.eNB.ubuntu18
@@ -53,6 +53,7 @@ RUN apt-get update && \
         iputils-ping \
         iproute2 \
         iperf \
+        gdb \
         python \
         python3 \
         python3-six \
diff --git a/docker/Dockerfile.gNB.rhel8.2 b/docker/Dockerfile.gNB.rhel8.2
index 9ec7ee755691ca2ce5a15494e943cd461edf576b..f782384f58dac750ea9560dca1f9a7eccfa0ebe4 100644
--- a/docker/Dockerfile.gNB.rhel8.2
+++ b/docker/Dockerfile.gNB.rhel8.2
@@ -46,6 +46,7 @@ RUN yum repolist --disablerepo=* && \
         lksctp-tools \
         nettle \
         tzdata \
+        gdb \
         python3 \
         python3-pip \
         net-tools \
diff --git a/docker/Dockerfile.gNB.ubuntu18 b/docker/Dockerfile.gNB.ubuntu18
index 6a98c8d3ce260142d4c459d2bccb01f803b372f3..11669c2af427640a2ab01a06feb6de1fce38c100 100644
--- a/docker/Dockerfile.gNB.ubuntu18
+++ b/docker/Dockerfile.gNB.ubuntu18
@@ -52,6 +52,7 @@ RUN apt-get update && \
         net-tools \
         iproute2 \
         iputils-ping \
+        gdb \
         python \
         python3 \
         python3-six \
diff --git a/docker/Dockerfile.lteRU.rhel8.2 b/docker/Dockerfile.lteRU.rhel8.2
index b41aee36dcac74969c1cc76fbbbc3db9202fa1a9..f20910ff510ec92452417e426cd43298b9c5f7b4 100644
--- a/docker/Dockerfile.lteRU.rhel8.2
+++ b/docker/Dockerfile.lteRU.rhel8.2
@@ -41,6 +41,7 @@ RUN yum update -y && \
         tzdata \
         procps-ng \
         atlas \
+        gdb \
         python3 \
         python3-pip \
         net-tools \
diff --git a/docker/Dockerfile.lteRU.ubuntu18 b/docker/Dockerfile.lteRU.ubuntu18
index 1810afb621551a6f12e03869f06ff5780320ca93..157a5a615a94f672a52064eff1c105d1b14c2b87 100644
--- a/docker/Dockerfile.lteRU.ubuntu18
+++ b/docker/Dockerfile.lteRU.ubuntu18
@@ -47,6 +47,7 @@ RUN apt-get update && \
         libatlas3-base \
         libconfig9 \
         net-tools \
+        gdb \
         python \
         python3 \
         python3-six \
diff --git a/docker/Dockerfile.lteUE.rhel8.2 b/docker/Dockerfile.lteUE.rhel8.2
index ab7d22493992daee89a9eec3908aa828b8f4a23d..303394ea27afaaee58bdbf156ff7e16f904c011a 100644
--- a/docker/Dockerfile.lteUE.rhel8.2
+++ b/docker/Dockerfile.lteUE.rhel8.2
@@ -44,6 +44,7 @@ RUN yum update -y && \
         nettle \
         tzdata \
         atlas \
+        gdb \
         python3 \
         python3-pip \
         iproute \
diff --git a/docker/Dockerfile.nrUE.rhel8.2 b/docker/Dockerfile.nrUE.rhel8.2
index dfb28cfd1d78e48b2affee2a2e1bb682d7d17308..3ee93ed5d277355200fa1fd22d97b7e780a67cd9 100644
--- a/docker/Dockerfile.nrUE.rhel8.2
+++ b/docker/Dockerfile.nrUE.rhel8.2
@@ -46,6 +46,7 @@ RUN yum update -y && \
         iputils \
         iproute \
         atlas \
+        gdb \
         python3 \
         python3-pip \
         libXpm \
diff --git a/docker/Dockerfile.nrUE.ubuntu18 b/docker/Dockerfile.nrUE.ubuntu18
index 9f68b947cd10d1a9324b2c2ba9e2b1d210da9ffc..0997783b8ba117239fa56ecddd6157438b9fe968 100644
--- a/docker/Dockerfile.nrUE.ubuntu18
+++ b/docker/Dockerfile.nrUE.ubuntu18
@@ -50,6 +50,7 @@ RUN apt-get update && \
         libconfig9 \
         openssl \
         net-tools \
+        gdb \
         python \
         python3 \
         python3-six \
diff --git a/docker/scripts/enb_entrypoint.sh b/docker/scripts/enb_entrypoint.sh
index 825dfd73c1392723d6fee1334636096fdc153370..2d49a0ed20f8c62aebf51df5f9f9fa097b799aa7 100755
--- a/docker/scripts/enb_entrypoint.sh
+++ b/docker/scripts/enb_entrypoint.sh
@@ -51,9 +51,15 @@ for c in ${CONFIG_FILES}; do
 
     # render template and inline replace config file
     sed -i "${EXPRESSIONS}" ${c}
+
+    echo "=================================="
+    echo "== Configuration file: ${c}"
+    cat ${c}
 done
 
 # Load the USRP binaries
+echo "=================================="
+echo "== Load USRP binaries"
 if [[ -v USE_B2XX ]]; then
     $PREFIX/bin/uhd_images_downloader.py -t b2xx
 elif [[ -v USE_X3XX ]]; then
@@ -62,6 +68,9 @@ elif [[ -v USE_N3XX ]]; then
     $PREFIX/bin/uhd_images_downloader.py -t n3xx
 fi
 
+# enable printing of stack traces on assert
+export gdbStacks=1
+
 echo "=================================="
 echo "== Starting eNB soft modem"
 if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
diff --git a/docker/scripts/gnb_entrypoint.sh b/docker/scripts/gnb_entrypoint.sh
index 6deff8da109fa7410e0c73b037eb6b04fbff8a19..4e8983599e26e6eb21db247e0d6a0de17ff86f7a 100755
--- a/docker/scripts/gnb_entrypoint.sh
+++ b/docker/scripts/gnb_entrypoint.sh
@@ -51,9 +51,15 @@ for c in ${CONFIG_FILES}; do
 
     # render template and inline replace config file
     sed -i "${EXPRESSIONS}" ${c}
+
+    echo "=================================="
+    echo "== Configuration file: ${c}"
+    cat ${c}
 done
 
 # Load the USRP binaries
+echo "=================================="
+echo "== Load USRP binaries"
 if [[ -v USE_B2XX ]]; then
     $PREFIX/bin/uhd_images_downloader.py -t b2xx
 elif [[ -v USE_X3XX ]]; then
@@ -62,6 +68,9 @@ elif [[ -v USE_N3XX ]]; then
     $PREFIX/bin/uhd_images_downloader.py -t n3xx
 fi
 
+# enable printing of stack traces on assert
+export gdbStacks=1
+
 echo "=================================="
 echo "== Starting gNB soft modem"
 if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
diff --git a/docker/scripts/lte_ru_entrypoint.sh b/docker/scripts/lte_ru_entrypoint.sh
index 297e437ac08a7acabd03c25864b2fb7f5b885055..746efb30b34ee223d0d57776f7bb7691b443098c 100755
--- a/docker/scripts/lte_ru_entrypoint.sh
+++ b/docker/scripts/lte_ru_entrypoint.sh
@@ -31,9 +31,15 @@ for c in ${CONFIG_FILES}; do
 
     # render template and inline replace config file
     sed -i "${EXPRESSIONS}" ${c}
+
+    echo "=================================="
+    echo "== Configuration file: ${c}"
+    cat ${c}
 done
 
 # Load the USRP binaries
+echo "=================================="
+echo "== Load USRP binaries"
 if [[ -v USE_B2XX ]]; then
     $PREFIX/bin/uhd_images_downloader.py -t b2xx
 elif [[ -v USE_X3XX ]]; then
@@ -42,6 +48,9 @@ elif [[ -v USE_N3XX ]]; then
     $PREFIX/bin/uhd_images_downloader.py -t n3xx
 fi
 
+# enable printing of stack traces on assert
+export gdbStacks=1
+
 echo "=================================="
 echo "== Starting eNB soft modem"
 if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
diff --git a/docker/scripts/lte_ue_entrypoint.sh b/docker/scripts/lte_ue_entrypoint.sh
index 82e96dd07ff14e6909903b0f6ee64a1ed36bf68f..2bdcb873c91c9e21197ab1fc053db142617c1114 100755
--- a/docker/scripts/lte_ue_entrypoint.sh
+++ b/docker/scripts/lte_ue_entrypoint.sh
@@ -30,6 +30,10 @@ for c in ${CONFIG_FILES}; do
 
     # render template and inline replace config file
     sed -i "${EXPRESSIONS}" ${c}
+
+    echo "=================================="
+    echo "== Configuration file: ${c}"
+    cat ${c}
 done
 
 #now generate USIM files
@@ -38,6 +42,8 @@ cd $PREFIX
 $PREFIX/bin/conf2uedata -c $PREFIX/etc/ue_usim.conf -o $PREFIX
 
 # Load the USRP binaries
+echo "=================================="
+echo "== Load USRP binaries"
 if [[ -v USE_B2XX ]]; then
     $PREFIX/bin/uhd_images_downloader.py -t b2xx
 elif [[ -v USE_X3XX ]]; then
@@ -57,6 +63,9 @@ if [[ -v USE_NFAPI ]]; then
   new_args+=("$PREFIX/etc/ue.conf")
 fi
 
+# enable printing of stack traces on assert
+export gdbStacks=1
+
 echo "=================================="
 echo "== Starting LTE UE soft modem"
 if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
diff --git a/docker/scripts/nr_ue_entrypoint.sh b/docker/scripts/nr_ue_entrypoint.sh
index 38b080a41b73b6c911826ada9d4ee943a1335fb1..616d71b5554c5eeabdc9f68c452430b65ac8fc1e 100755
--- a/docker/scripts/nr_ue_entrypoint.sh
+++ b/docker/scripts/nr_ue_entrypoint.sh
@@ -40,9 +40,15 @@ for c in ${CONFIG_FILES}; do
 
     # render template and inline replace config file
     sed -i "${EXPRESSIONS}" ${c}
+
+    echo "=================================="
+    echo "== Configuration file: ${c}"
+    cat ${c}
 done
 
 # Load the USRP binaries
+echo "=================================="
+echo "== Load USRP binaries"
 if [[ -v USE_B2XX ]]; then
     $PREFIX/bin/uhd_images_downloader.py -t b2xx
 elif [[ -v USE_X3XX ]]; then
@@ -58,6 +64,9 @@ while [[ $# -gt 0 ]]; do
   shift
 done
 
+# enable printing of stack traces on assert
+export gdbStacks=1
+
 echo "=================================="
 echo "== Starting NR UE soft modem"
 if [[ -v USE_ADDITIONAL_OPTIONS ]]; then