Use new gdb commands for core dump examination 94/23694/7
authorVratko Polak <vrpolak@cisco.com>
Fri, 29 Nov 2019 14:55:43 +0000 (15:55 +0100)
committerVratko Polak <vrpolak@cisco.com>
Thu, 5 Dec 2019 09:29:25 +0000 (10:29 +0100)
Change-Id: I96f40fa816055a656209cbbcae8259a74cc4bd80
Signed-off-by: Vratko Polak <vrpolak@cisco.com>
resources/libraries/python/CoreDumpUtil.py
resources/tools/scripts/gdb-commands [new file with mode: 0644]

index 9d9369a..76084a3 100644 (file)
@@ -118,7 +118,7 @@ class CoreDumpUtil:
                 self.enable_coredump_limit(node, vpp_pid)
 
     def get_core_files_on_all_nodes(self, nodes, disable_on_success=True):
-        """Process all core files and remove the original core files on al
+        """Process all core files and remove the original core files on all
         nodes.
 
         :param nodes: Nodes in the topology.
@@ -128,12 +128,12 @@ class CoreDumpUtil:
         :type disable_on_success: bool
         """
         for node in nodes.values():
-            command = f"for f in {Constants.CORE_DUMP_DIR}/*.core; do " \
-                f"sudo gdb /usr/bin/vpp ${{f}} " \
-                f"--eval-command=\"set pagination off\" " \
-                f"--eval-command=\"thread apply all bt\" " \
-                f"--eval-command=\"quit\"; " \
-                f"sudo rm -f ${{f}}; done"
+            command = (
+                f"for f in {Constants.CORE_DUMP_DIR}/*.core; do sudo gdb"
+                f" /usr/bin/vpp ${{f}} -ex 'source -v {Constants.REMOTE_FW_DIR}"
+                f"/resources/tools/scripts/gdb-commands' -ex quit;"
+                f" sudo rm -f ${{f}}; done"
+            )
             try:
                 exec_cmd_no_error(node, command, timeout=3600)
                 if disable_on_success:
diff --git a/resources/tools/scripts/gdb-commands b/resources/tools/scripts/gdb-commands
new file mode 100644 (file)
index 0000000..419dca9
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright (c) 2019 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Most of the content of this file has been copied from:
+# http://stdio.be/vpp/gdb-commands.txt
+
+# Usage:
+# gdb ${BINFILE} ${CORE} -ex 'source -v gdb-commands' -ex quit
+
+set pagination off
+thread apply all bt
+
+define printstack
+  set $i=0
+  while $i < 15
+      frame $i
+      x/i $pc
+      info locals
+      info reg
+      set $i = $i + 1
+  end
+end
+thread apply all printstack
+
+# info proc mappings