[Lldb-commits] [lldb] 723a1ca - Fix the crashlog.py script's use of the load_address property.

Jim Ingham via lldb-commits lldb-commits at lists.llvm.org
Thu May 28 09:56:14 PDT 2020


Author: Jim Ingham
Date: 2020-05-28T09:55:40-07:00
New Revision: 723a1caa377b898ff3dc0897156f544feab99ac8

URL: https://github.com/llvm/llvm-project/commit/723a1caa377b898ff3dc0897156f544feab99ac8
DIFF: https://github.com/llvm/llvm-project/commit/723a1caa377b898ff3dc0897156f544feab99ac8.diff

LOG: Fix the crashlog.py script's use of the load_address property.

This property is explicitly for use only in the interactive editor,
and NOT in commands.  It's use worked until we got more careful about
not leaving lldb.target lying around in the script interpreter.

I also added a quick sniff test for the save_crashlog command.

<rdar://problem/60350620>
Differential Revision: https://reviews.llvm.org/D80680

Added: 
    lldb/test/API/macosx/save_crashlog/Makefile
    lldb/test/API/macosx/save_crashlog/TestSaveCrashlog.py
    lldb/test/API/macosx/save_crashlog/main.c

Modified: 
    lldb/examples/python/crashlog.py

Removed: 
    


################################################################################
diff  --git a/lldb/examples/python/crashlog.py b/lldb/examples/python/crashlog.py
index b7b62acc60ef..1c1602b0131e 100755
--- a/lldb/examples/python/crashlog.py
+++ b/lldb/examples/python/crashlog.py
@@ -791,11 +791,11 @@ def save_crashlog(debugger, command, exe_ctx, result, dict):
                     block_range = block.range[frame.addr]
                     if block_range:
                         block_start_addr = block_range[0]
-                        frame_offset = frame_pc - block_start_addr.load_addr
+                        frame_offset = frame_pc - block_start_addr.GetLoadAddress(target)
                     else:
-                        frame_offset = frame_pc - frame.function.addr.load_addr
+                        frame_offset = frame_pc - frame.function.addr.GetLoadAddress(target)
                 elif frame.symbol:
-                    frame_offset = frame_pc - frame.symbol.addr.load_addr
+                    frame_offset = frame_pc - frame.symbol.addr.GetLoadAddress(target)
                 out_file.write(
                     '%-3u %-32s 0x%16.16x %s' %
                     (frame_idx, frame.module.file.basename, frame_pc, frame.name))

diff  --git a/lldb/test/API/macosx/save_crashlog/Makefile b/lldb/test/API/macosx/save_crashlog/Makefile
new file mode 100644
index 000000000000..695335e068c0
--- /dev/null
+++ b/lldb/test/API/macosx/save_crashlog/Makefile
@@ -0,0 +1,4 @@
+C_SOURCES := main.c
+CFLAGS_EXTRAS := -std=c99
+
+include Makefile.rules

diff  --git a/lldb/test/API/macosx/save_crashlog/TestSaveCrashlog.py b/lldb/test/API/macosx/save_crashlog/TestSaveCrashlog.py
new file mode 100644
index 000000000000..c86294490f61
--- /dev/null
+++ b/lldb/test/API/macosx/save_crashlog/TestSaveCrashlog.py
@@ -0,0 +1,68 @@
+"""
+Test that the save_crashlog command functions
+"""
+
+
+import os
+import lldb
+import lldbsuite.test.lldbutil as lldbutil
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test.decorators import *
+
+
+class TestSaveCrashlog(TestBase):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    # If your test case doesn't stress debug info, the
+    # set this to true.  That way it won't be run once for
+    # each debug info format.
+    NO_DEBUG_INFO_TESTCASE = True
+
+    @skipUnlessDarwin
+    def test_save_crashlog(self):
+        """There can be many tests in a test case - describe this test here."""
+        self.build()
+        self.main_source_file = lldb.SBFileSpec("main.c")
+        self.save_crashlog()
+
+    def save_crashlog(self):
+
+        (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+                                   "I was called", self.main_source_file)
+
+        self.runCmd("command script import lldb.macosx.crashlog")
+        out_file = os.path.join(self.getBuildDir(), "crash.log")
+        self.runCmd("save_crashlog '%s'"%(out_file))
+
+        # Make sure we wrote the file:
+        self.assertTrue(os.path.exists(out_file), "We wrote our file")
+        
+        # Now scan the file to make sure it looks right:
+        # First get a few facts we'll use:
+        exe_module = target.FindModule(target.GetExecutable())
+        uuid_str = exe_module.GetUUIDString()
+
+        # We'll set these to true when we find the elements in the file
+        found_call_me = False
+        found_main_line = False
+        found_thread_header = False
+        found_uuid_str = False
+
+        with open(out_file, "r") as f:
+            # We want to see a line with
+            for line in f:
+                if "Thread 0:" in line:
+                    found_thread_header = True
+                if "call_me" in line and "main.c:" in line:
+                    found_call_me = True
+                if "main" in line and "main.c:" in line:
+                    found_main_line = True
+                if uuid_str in line and "a.out" in line:
+                    found_uuid_str = True
+        
+        self.assertTrue(found_thread_header, "Found thread header")
+        self.assertTrue(found_call_me, "Found call_me line in stack")
+        self.assertTrue(found_uuid_str, "Found main binary UUID")
+        self.assertTrue(found_main_line, "Found main line in call stack")
+                        

diff  --git a/lldb/test/API/macosx/save_crashlog/main.c b/lldb/test/API/macosx/save_crashlog/main.c
new file mode 100644
index 000000000000..ca94bc970815
--- /dev/null
+++ b/lldb/test/API/macosx/save_crashlog/main.c
@@ -0,0 +1,13 @@
+#include <stdio.h>
+
+void
+call_me() {
+  printf("I was called");
+}
+
+int
+main()
+{
+  call_me();
+  return 0;
+}


        


More information about the lldb-commits mailing list