Now that we have an LLDB package, make the "lldb.macosx.crashlog" module work with all of the new module paths.

llvm-svn: 155528
This commit is contained in:
Greg Clayton 2012-04-25 01:49:50 +00:00
parent 68b922590d
commit ed3eee6e55
4 changed files with 35 additions and 22 deletions

View File

@ -20,14 +20,15 @@ import commands
import optparse
import os
import shlex
import symbolication # from lldb/examples/python/symbolication.py
import lldb.utils.symbolication
def load_dylib():
if lldb.target:
python_module_directory = os.path.dirname(__file__)
libheap_dylib_path = python_module_directory + '/libheap.dylib'
heap_code_directory = python_module_directory + '/heap'
libheap_dylib_path = heap_code_directory + '/heap/libheap.dylib'
if not os.path.exists(libheap_dylib_path):
make_command = '(cd "%s" ; make)' % python_module_directory
make_command = '(cd "%s" ; make)' % heap_code_directory
print make_command
print commands.getoutput(make_command)
if os.path.exists(libheap_dylib_path):
@ -172,7 +173,7 @@ def heap_search(options, arg_str):
lldb.debugger.GetCommandInterpreter().HandleCommand(memory_command, cmd_result)
print cmd_result.GetOutput()
if options.stack:
symbolicator = symbolication.Symbolicator()
symbolicator = lldb.utils.symbolication.Symbolicator()
symbolicator.target = lldb.target
expr_str = "g_stack_frames_count = sizeof(g_stack_frames)/sizeof(uint64_t); (int)__mach_stack_logging_get_frames((unsigned)mach_task_self(), 0x%xull, g_stack_frames, g_stack_frames_count, &g_stack_frames_count)" % (malloc_addr)
#print expr_str

View File

@ -37,7 +37,7 @@ import shlex
import sys
import time
import uuid
import symbolication
import lldb.utils.symbolication
PARSE_MODE_NORMAL = 0
PARSE_MODE_THREAD = 1
@ -45,7 +45,7 @@ PARSE_MODE_IMAGES = 2
PARSE_MODE_THREGS = 3
PARSE_MODE_SYSTEM = 4
class CrashLog(symbolication.Symbolicator):
class CrashLog(lldb.utils.symbolication.Symbolicator):
"""Class that does parses darwin crash logs"""
thread_state_regex = re.compile('^Thread ([0-9]+) crashed with')
thread_regex = re.compile('^Thread ([0-9]+)([^:]*):(.*)')
@ -97,7 +97,7 @@ class CrashLog(symbolication.Symbolicator):
else:
return "[%3u] 0x%16.16x" % (self.index, self.pc)
class DarwinImage(symbolication.Image):
class DarwinImage(lldb.utils.symbolication.Image):
"""Class that represents a binary images in a darwin crash log"""
dsymForUUIDBinary = os.path.expanduser('~rc/bin/dsymForUUID')
if not os.path.exists(dsymForUUIDBinary):
@ -106,8 +106,8 @@ class CrashLog(symbolication.Symbolicator):
dwarfdump_uuid_regex = re.compile('UUID: ([-0-9a-fA-F]+) \(([^\(]+)\) .*')
def __init__(self, text_addr_lo, text_addr_hi, identifier, version, uuid, path):
symbolication.Image.__init__(self, path, uuid);
self.add_section (symbolication.Section(text_addr_lo, text_addr_hi, "__TEXT"))
lldb.utils.symbolication.Image.__init__(self, path, uuid);
self.add_section (lldb.utils.symbolication.Section(text_addr_lo, text_addr_hi, "__TEXT"))
self.identifier = identifier
self.version = version
@ -158,7 +158,7 @@ class CrashLog(symbolication.Symbolicator):
def __init__(self, path):
"""CrashLog constructor that take a path to a darwin crash log file"""
symbolication.Symbolicator.__init__(self);
lldb.utils.symbolication.Symbolicator.__init__(self);
self.path = os.path.expanduser(path);
self.info_lines = list()
self.system_profile = list()
@ -313,7 +313,7 @@ class CrashLog(symbolication.Symbolicator):
def create_target(self):
#print 'crashlog.create_target()...'
target = symbolication.Symbolicator.create_target(self)
target = lldb.utils.symbolication.Symbolicator.create_target(self)
if target:
return target
# We weren't able to open the main executable as, but we can still symbolicate
@ -446,11 +446,11 @@ be disassembled and lookups can be performed using the addresses found in the cr
instructions = symbolicated_frame_address.get_instructions()
if instructions:
print
symbolication.disassemble_instructions (target,
instructions,
frame.pc,
options.disassemble_before,
options.disassemble_after, frame.index > 0)
lldb.utils.symbolication.disassemble_instructions (target,
instructions,
frame.pc,
options.disassemble_before,
options.disassemble_after, frame.index > 0)
print
symbolicated_frame_address_idx += 1
else:
@ -467,6 +467,6 @@ if __name__ == '__main__':
lldb.debugger = lldb.SBDebugger.Create()
SymbolicateCrashLog (sys.argv[1:])
elif lldb.debugger:
lldb.debugger.HandleCommand('command script add -f crashlog.Symbolicate crashlog')
lldb.debugger.HandleCommand('command script add -f lldb.macosx.crashlog.Symbolicate crashlog')
print '"crashlog" command installed, type "crashlog --help" for detailed help'

View File

@ -240,12 +240,24 @@ create_python_package "/formatters" "${package_files}"
package_files="${SRC_ROOT}/examples/python/symbolication.py"
create_python_package "/utils" "${package_files}"
# lldb/macosx
package_files="${SRC_ROOT}/examples/python/crashlog.py
${SRC_ROOT}/examples/darwin/heap_find/heap.py"
create_python_package "/macosx" "${package_files}"
if [ ${OS_NAME} == "Darwin" ]
then
# lldb/macosx
package_files="${SRC_ROOT}/examples/python/crashlog.py
${SRC_ROOT}/examples/darwin/heap_find/heap.py"
create_python_package "/macosx" "${package_files}"
# Copy files needed by lldb/macosx/heap.py to build libheap.dylib
heap_dir="${framework_python_dir}/macosx/heap"
if [ ! -d "${heap_dir}" ]
then
mkdir -p "${heap_dir}"
cp "${SRC_ROOT}/examples/darwin/heap_find/heap/heap_find.cpp" "${heap_dir}"
cp "${SRC_ROOT}/examples/darwin/heap_find/heap/Makefile" "${heap_dir}"
fi
fi
fi
exit 0

View File

@ -534,7 +534,7 @@ ScriptInterpreterPython::ExecuteOneLine (const char *command, CommandReturnObjec
if (script_interpreter_dict != NULL)
{
PyObject *pfunc = (PyObject*)m_run_one_line;
PyObject *pmod = PyImport_AddModule ("embedded_interpreter");
PyObject *pmod = PyImport_AddModule ("lldb.embedded_interpreter");
if (pmod != NULL)
{
PyObject *pmod_dict = PyModule_GetDict (pmod);