[Lldb-commits] [lldb] r180975 - <rdar://problem/11558812>

Enrico Granata egranata at apple.com
Fri May 3 11:04:44 PDT 2013


Not really a test case proper - just an example to make “load packages” more explicative

Enrico Granata
✉ egranata@.com
✆ 27683

On May 3, 2013, at 10:54 AM, "Malea, Daniel" <daniel.malea at intel.com> wrote:

> Can you please put test cases in the 'test' directory, instead of the
> commit message. It's not exactly convenient to run it this way.
> 
> 
> Dan
> 
> On 2013-05-02 7:57 PM, "Enrico Granata" <egranata at apple.com> wrote:
> 
>> Author: enrico
>> Date: Thu May  2 18:57:33 2013
>> New Revision: 180975
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=180975&view=rev
>> Log:
>> <rdar://problem/11558812>
>> 
>> Allow command script import to load packages.
>> 
>> e.g.:
>> egranata$ ./lldb
>> (lldb) command script import lldb.macosx.crashlog
>> "crashlog" and "save_crashlog" command installed, use the "--help" option
>> for detailed help
>> "malloc_info", "ptr_refs", "cstr_refs", and "objc_refs" commands have
>> been installed, use the "--help" options on these commands for detailed
>> help.
>> The "unwind-diagnose" command has been installed, type "help
>> unwind-diagnose" for detailed help.
>> (lldb) 
>> 
>> ./lldb
>> (lldb) command script import theFoo
>> I am happy
>> (lldb) fbc
>> àèìòù
>> (lldb)
>> 
>> egranata$ ls theFoo/
>> __init__.py theBar.py
>> 
>> egranata$ cat theFoo/__init__.py
>> import lldb
>> import theBar
>> 
>> def __lldb_init_module(debugger, internal_dict):
>> 	print "I am happy"
>> 	debugger.HandleCommand("command script add -f theFoo.theBar.theCommand
>> fbc")
>> 	return None
>> 
>> egranata$ cat theFoo/theBar.py
>> #encoding=utf-8
>> 
>> def theCommand(debugger, command, result, internal_dict):
>> 	result.PutCString(u"àèìòù")
>> 	return None
>> 
>> 
>> Modified:
>>   lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
>> 
>> Modified: lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
>> URL: 
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/ScriptIn
>> terpreterPython.cpp?rev=180975&r1=180974&r2=180975&view=diff
>> ==========================================================================
>> ====
>> --- lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp (original)
>> +++ lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp Thu May  2
>> 18:57:33 2013
>> @@ -2594,42 +2594,47 @@ ScriptInterpreterPython::LoadScriptingMo
>>    {
>>        FileSpec target_file(pathname, true);
>> 
>> -        // TODO: would we want to reject any other value?
>> -        if (target_file.GetFileType() == FileSpec::eFileTypeInvalid ||
>> -            target_file.GetFileType() == FileSpec::eFileTypeUnknown)
>> -        {
>> -            error.SetErrorString("invalid pathname");
>> -            return false;
>> -        }
>> -        
>> -        const char* directory = target_file.GetDirectory().GetCString();
>> -        std::string basename(target_file.GetFilename().GetCString());
>> +        std::string basename;
>> +        StreamString command_stream;
>> 
>>        // Before executing Pyton code, lock the GIL.
>>        Locker py_lock (this,
>>                        Locker::AcquireLock      | (init_session ?
>> Locker::InitSession     : 0),
>>                        Locker::FreeAcquiredLock | (init_session ?
>> Locker::TearDownSession : 0));
>> 
>> -        // now make sure that Python has "directory" in the search path
>> -        StreamString command_stream;
>> -        command_stream.Printf("if not (sys.path.__contains__('%s')):\n
>> sys.path.insert(1,'%s');\n\n",
>> -                              directory,
>> -                              directory);
>> -        bool syspath_retval =
>> ExecuteMultipleLines(command_stream.GetData(),
>> ScriptInterpreter::ExecuteScriptOptions().SetEnableIO(false).SetSetLLDBGlo
>> bals(false));
>> -        if (!syspath_retval)
>> +        if (target_file.GetFileType() == FileSpec::eFileTypeInvalid ||
>> +            target_file.GetFileType() == FileSpec::eFileTypeUnknown ||
>> +            target_file.GetFileType() == FileSpec::eFileTypeDirectory )
>>        {
>> -            error.SetErrorString("Python sys.path handling failed");
>> -            return false;
>> +            // if not a filename, try to just plain import
>> +            basename = pathname;
>>        }
>> -        
>> -        // strip .py or .pyc extension
>> -        ConstString extension = target_file.GetFileNameExtension();
>> -        if (extension)
>> +        else
>>        {
>> -            if (::strcmp(extension.GetCString(), "py") == 0)
>> -                basename.resize(basename.length()-3);
>> -            else if(::strcmp(extension.GetCString(), "pyc") == 0)
>> -                basename.resize(basename.length()-4);
>> +            const char* directory =
>> target_file.GetDirectory().GetCString();
>> +            std::string basename(target_file.GetFilename().GetCString());
>> +            
>> +            // now make sure that Python has "directory" in the search
>> path
>> +            StreamString command_stream;
>> +            command_stream.Printf("if not
>> (sys.path.__contains__('%s')):\n    sys.path.insert(1,'%s');\n\n",
>> +                                  directory,
>> +                                  directory);
>> +            bool syspath_retval =
>> ExecuteMultipleLines(command_stream.GetData(),
>> ScriptInterpreter::ExecuteScriptOptions().SetEnableIO(false).SetSetLLDBGlo
>> bals(false));
>> +            if (!syspath_retval)
>> +            {
>> +                error.SetErrorString("Python sys.path handling failed");
>> +                return false;
>> +            }
>> +            
>> +            // strip .py or .pyc extension
>> +            ConstString extension = target_file.GetFileNameExtension();
>> +            if (extension)
>> +            {
>> +                if (::strcmp(extension.GetCString(), "py") == 0)
>> +                    basename.resize(basename.length()-3);
>> +                else if(::strcmp(extension.GetCString(), "pyc") == 0)
>> +                    basename.resize(basename.length()-4);
>> +            }
>>        }
>> 
>>        // check if the module is already import-ed
>> 
>> 
>> _______________________________________________
>> lldb-commits mailing list
>> lldb-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20130503/2e8bd171/attachment.html>


More information about the lldb-commits mailing list