Thanks for the explanation Enrico, that's what I thought.

So, is it possible to use SBListener to register some callback on a breakpoint 
hit? Or is it possible only via the C++ API or the "target stop-hook" commands?

From: Enrico Granata <[email protected]<mailto:[email protected]>>
Date: Wednesday, 24 April, 2013 2:23 PM
To: Daniel Malea <[email protected]<mailto:[email protected]>>
Cc: Greg Clayton <[email protected]<mailto:[email protected]>>, 
"[email protected]<mailto:[email protected]>" 
<[email protected]<mailto:[email protected]>>
Subject: Re: [lldb-dev] Callback API question

I don’t think we currently supporting setting Python breakpoint callbacks 
through the SB API
We would need to add some code that takes a meaningful representation of a 
Python callable, and makes a C++ thunk that knows how to call into Python and 
get the result back to C++-land
It’s definitely an enhancement worth considering

Enrico Granata
✉ egranata@.com
✆ 27683

On Apr 24, 2013, at 11:00 AM, "Malea, Daniel" 
<[email protected]<mailto:[email protected]>> wrote:

Hi Greg, or whoever reads this first,

I have a question about the python API lldb.SBBreakpoint.SetCallback function. 
According to the docs, the signature is:

SetCallback(self, *args) unbound lldb.SBBreakpoint method
   SetCallback(self, BreakpointHitCallback callback, void baton)

However, I am not sure how to create an instance of the BreakpointHitCallback 
type that is required for the second parameter. I'm not seeing any class in the 
Python API that is named that; only the C++ API has a typedef of that name:

typedef bool (*BreakpointHitCallback) (void *baton,
                                      SBProcess &process,
                                      SBThread &thread,
                                      lldb::SBBreakpointLocation &location);


I tried passing a function that has (what I believe is) the correct signature:

class MyTestCase(TestBase):
 def bp_callback(self, process, thread, breakpoint_loc):
   Pass

 def register_callback(self, target)
   breakpoint = target.BreakpointCreateByLocation('main.c', self.line1)
   breakpoint.SetCallback(self.bp_callback, self)


But I am getting a python error:

TypeError: in method 'SBBreakpoint_SetCallback', argument 2 of type 
'lldb::SBBreakpoint::BreakpointHitCallback'

So, my question is: is it possible to register a callback to be called when a 
breakpoint is hit using that function? If so, what am I doing wrong? If not, is 
it preferable to create an SBListener for this purpose, or is the "target 
stop-hook add" command the only way to do what I'm trying to do? I'm trying to 
avoid using the built-in script interpreter..



Thanks,
Dan

_______________________________________________
lldb-dev mailing list
[email protected]<mailto:[email protected]>
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev


_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to