[lldb-dev] Issue with Launch API
zephyr git
zephyr.git at gmail.com
Mon Oct 20 21:57:46 PDT 2014
Hi,
I'm using the SBTarget.Launch() API in Python:
process = target.Launch(self.dbg.GetListener(), ['a','b'], env, stdin,
'stdour.txt, 'stderr.txt', os.getcwd(), 0 , True, err)
I got the following error:
...
File "/home/media/llvm/lib/python2.7/site-packages/lldb/__init__.py",
line 7973, in Launch
return _lldb.SBTarget_Launch(self, *args)
NotImplementedError: Wrong number or type of arguments for overloaded
function 'SBTarget_Launch'.
Possible C/C++ prototypes are:
lldb::SBTarget::Launch(lldb::SBListener &,char const **,char const
**,char const *,char const *,char const *,char const
*,uint32_t,bool,lldb::SBError &)
lldb::SBTarget::Launch(lldb::SBLaunchInfo &,lldb::SBError &)
If I replace the string list ['a','b'] with None, it works.
I find that all the tests and samples uses None.
It looks the problem stems from overloaded Launch in SBTarget.i.
In LLDBWrapPython.cpp:
_wrap_SBTarget_Launch__SWIG_0 () { ...} // wrapper for
Launch(lldb::SBListener &...)
_wrap_SBTarget_Launch__SWIG_1 () { ...} // wrapper for Launch
(lldb::SBLaunchInfo &...);
SWIGINTERN PyObject *_wrap_SBTarget_Launch(PyObject *self, PyObject *args) {
...
if (argc == 3) {
....
}
if (argc == 11) {
int _v;
void *vptr = 0;
int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_lldb__SBTarget, 0);
_v = SWIG_CheckState(res);
if (_v) {
void *vptr = 0;
int res = SWIG_ConvertPtr(argv[1], &vptr,
SWIGTYPE_p_lldb__SBListener, 0);
_v = SWIG_CheckState(res);
if (_v) {
void *vptr = 0;
int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_p_char, 0); //
===================== Fails here. unable to cast to char**
_v = SWIG_CheckState(res);
if (_v) {
....
if (_v) {
return _wrap_SBTarget_Launch__SWIG_0(self, args);
================> real check here
...
}
fail:
SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of
arguments for overloaded function 'SBTarget_Launch'.\n"
" Possible C/C++ prototypes are:\n"
" lldb::SBTarget::Launch(lldb::SBListener &,char const **,char const
**,char const *,char const *,char const *,char const
*,uint32_t,bool,lldb::SBError &)\n"
" lldb::SBTarget::Launch(lldb::SBLaunchInfo &,lldb::SBError &)\n");
return 0;
It seems to me the swig code does some unnecessary check before it goes
into the real wrapper.
Any inputs?
Thanks,
Zephyr
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20141020/7e1b5cf6/attachment.html>
More information about the lldb-dev
mailing list