Hi Tom,

It works with stepi.
The stepping process consists now in two phases:
- stepping until we are no more in the the caller function
- stepping while function name unknown or still in Eo.c (yes I stay with 
that, it seems easier than with the library)

It now supports Eo with and without symbols.

Code is following. Let's see soon in SVN.

Daniel

class Eo_step(gdb.Command):
    def __init__(self):
       gdb.Command.__init__(self, "eo_step", gdb.COMMAND_OBSCURE)

    def invoke (self, arg, from_tty):
       self.priv_prev_line = gdb.selected_frame().find_sal().line
       self.priv_prev_symtab = gdb.selected_frame().find_sal().symtab
       while True:
          # step by one assembly instruction
          gdb.execute("stepi", False, to_string=True)
          # While under same code line
          self.priv_current_line = gdb.selected_frame().find_sal().line
          self.priv_current_symtab = gdb.selected_frame().find_sal().symtab
          if (self.priv_current_line != self.priv_prev_line) or 
(str(self.priv_current_symtab) != str(self.priv_prev_symtab)):
             break

       while True:
          # step by one assembly instruction
          gdb.execute("stepi", False, to_string=True)
          # While under unknown code or Eo code
          symbolNotFound = True
          if (gdb.selected_frame().find_sal().symtab != None and 
gdb.selected_frame().find_sal().symtab.filename == "lib/eo/eo.c"):
             symbolNotFound = False

          if (gdb.selected_frame().function() != None) and 
(symbolNotFound == True):
             print "You reached the function " + 
str(gdb.selected_frame().function())
             break
Eo_step()


On 12/06/2012 05:14 PM, Tom Hacohen wrote:
> Just use "stepi", that one goes inside. "step" goes to the next line of
> code and if there is none inside it just steps to the next line. I'm
> actually trying to look for a command that does what I said we need in the
> first place (and that you've implemented to some extent), which just goes
> on until the next line with debug information. Anyhow, now you can
> implement exactly that, just walk into eo_do_internal until the next line
> with debug info, easy.
>
> Btw, there's another thing we need, and that's probably a way to stop on an
> eo_do with a specific op code, like we break on evas_object_resize at the
> moment. It's not a big deal because this can be achieved with breaking on
> the internal functions, but still, I think it'll make our lives easier.
> This one is probably easier to make.
>
>
> On Thu, Dec 6, 2012 at 11:30 AM, daniel.za...@samsung.com <
> daniel.za...@samsung.com> wrote:
>
>> When I compile without -O and -g, gdb behaves like with stripped
>> library, i.e doesn't try to enter the function. Maybe I do something wrong.
>> Tom, can you try it on your computer?
>>
>> Thank you
>> Daniel
>>
>> On 12/06/2012 12:45 AM, Tom Hacohen wrote:
>>> Compile Eo in release mode: remove -O0/-g from your CFLAGS, re-configure
>> Eo
>>> (efl tree I assume) with --with-profile=release (or something like that,
>>> just check the configure options, it's easy) and make && make install.
>> You
>>> can potentially just strip the binary, doesn't matter really...
>>>
>>>
>>> On Wed, Dec 5, 2012 at 3:52 PM, daniel.za...@samsung.com <
>>> daniel.za...@samsung.com> wrote:
>>>
>>>> Tom, the 'sudo strip -g libeo.so' on my computer prevents me to see info
>>>> about this library in gdb, as explained before. How can I compile Eo in
>>>> release mode?
>>>>
>>>> Gustavo, this could be very useful. We need to check if it really can be
>>>> done and if it is easy for the user. Is the eo_do_step supposed to
>>>> execute the functions too? How does it wait for commands (your last
>>>> line), I mean, is it inside the eo_do_step function?
>>>> Eo uses va_list to store the parameters and we need to be careful with
>>>> that.
>>>>
>>>> On 12/05/2012 05:11 PM, Tom Hacohen wrote:
>>>>> Gustavo,
>>>>>
>>>>> Your suggestion is good (I already told you that in the past, I think),
>>>> but
>>>>> I believe it's unrelated to what we are trying to achieve here. What I
>>>> want
>>>>> is an easy way to step into an eo_do function, just like we would have
>>>> done
>>>>> with any other function.
>>>>>
>>>>> What I really want to see is just "run until you exit the libeo.so
>> binary
>>>>> and get back to a user function"...
>>>>>
>>>>>
>>>>> On Wed, Dec 5, 2012 at 3:05 PM, Gustavo Sverzut Barbieri <
>>>>> barbi...@profusion.mobi> wrote:
>>>>>
>>>>>> Let me jump in, proposing here what I already proposed earlier at IRC
>>>>>> and in person during LinuxCon-EU:
>>>>>>
>>>>>> we should use the same debug helper way as gcc does for itself.
>>>>>>
>>>>>> GCC is built on top of an union of every possible AST node. So
>>>>>> functions, variables, loops... are all into the same type/union,
>>>>>> making it dozen pages of gdb output to get every possible field and
>>>>>> combination if you "p *node"
>>>>>>
>>>>>> To solve this they ship some  functions in their own code, that you
>>>>>> can use to debug its own code. Similar to "p gcc_node_print(node)" (I
>>>>>> don't recall the exact name), and another to navigate the tree.
>>>>>>
>>>>>> Then I propose we create a "eo_do_step(obj, va_list ap)" that we can:
>>>>>> "(gdb) p eo_do_step(obj, ap)" from our debug session. It would
>>>>>> replicate the dispatch logic from eo_do(), but before executing each
>>>>>> call it would print out the call and parameters. We can use Eo
>>>>>> introspection to try to help user by showing the function name,
>>>>>> description and parameter types.
>>>>>>
>>>>>> Suppose doing: eo_do(evas_obj, evas_obj_position_set(10, 20),
>>>>>> evas_obj_size_set(300, 400));
>>>>>> you break point in eo_do and call:
>>>>>>
>>>>>> (gdb) p eo_do_step(obj, ap)
>>>>>> Operating on: obj=0xaabbcc00 (Evas_Object_Rectangle)
>>>>>> Function: evas_obj_position_set(int x, int y) "Set the position of an
>>>>>> evas object."
>>>>>> calling: evas_obj_position_set(x=10, y=20)
>>>>>> (eo_do_step)  <--- waits for commands such as continue, step...
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wed, Dec 5, 2012 at 12:46 PM, daniel.za...@samsung.com
>>>>>> <daniel.za...@samsung.com> wrote:
>>>>>>> Hi all,
>>>>>>>
>>>>>>> I don't need to reply, but to thank you and give you respect, I feel
>>>>>>> that I must reply ;-) When I strip Eo library, I cannot in gcc step
>>>> into
>>>>>>> at all, I mean, I can't reach the final destination. It is like the
>>>>>>> 'skip' feature of gdb. So for the moment, I am stuck with that
>> filename
>>>>>>> and need to find a solution.
>>>>>>>
>>>>>>> Second point, as I wrote before, there is a bug in gdb when executing
>>>>>>> python scripts (link below). It will be fixed in gdb 7.6 that is
>>>>>>> officially supposed to be delivered in mid-february 2013 but as a gdb
>>>>>>> maintainer said "In the past few releases, we have typically been
>> late
>>>>>>> by a few weeks.", I think we will have to wait a little more.
>>>>>>>
>>>>>>> Hopefully, when I will have time, I will insert this script into SVN
>>>> and
>>>>>>> the installation will put it automatically into the /opt/e17
>> directory
>>>>>>> (or different). The question here is if we have a common directory
>> for
>>>>>>> all this nice weird stuff or if it will be a new directory.
>>>>>>>
>>>>>>> JackDanielZ
>>>>>>>
>>>>>>> On 12/05/2012 04:24 PM, Tom Hacohen wrote:
>>>>>>>> Cool. And we already talked a bit more on IRC about the usage of the
>>>>>> binary
>>>>>>>> name vs. the source file name, so I'm happy, no need for your reply
>>>>>> here.
>>>>>>>> On 5 Dec 2012 05:16, "daniel.za...@samsung.com" <
>>>>>> daniel.za...@samsung.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Hey Tom,
>>>>>>>>>
>>>>>>>>> I saw your mail, I just wanted to explain SeoZ how to do now until
>> I
>>>>>> put
>>>>>>>>> it there automatically. I will change the name to eo_step.
>>>>>>>>> I know this site, I don't know yet which way to use to configure
>> gdb.
>>>>>>>>> For the moment, I create manually a .gdbinit in my home directory
>> and
>>>>>>>>> there source the python script.
>>>>>>>>> Well, I can put the script in src/utils/Eo and then install it into
>>>>>>>>> /opt/e17/share/eo/utils or something like that. But I think the
>> user
>>>>>>>>> will have to configure manually gdb, i.e add 'source
>>>>>>>>> /opt/e17/.../eo_step.py' into ~/.gdbinit.
>>>>>>>>> Just for info, there is some bug into gdb that makes it crash with
>>>> the
>>>>>>>>> script in a specific scenario. I opened a ticket
>>>>>>>>> <http://sourceware.org/bugzilla/show_bug.cgi?id=14916> there and
>>>> hope
>>>>>> it
>>>>>>>>> will help.
>>>>>>>>>
>>>>>>>>> Daniel
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 12/05/2012 01:29 AM, Tom Hacohen wrote:
>>>>>>>>>> Daniel,
>>>>>>>>>>
>>>>>>>>>> It should be installed (as I've said before) see
>>>>>>>>>> http://sourceware.org/gdb/onlinedocs/gdb/Python.html for more
>> info.
>>>>>>>>>> Then it'll be just a matter of loading the script and using it (or
>>>>>>>>> possibly
>>>>>>>>>> it'll get loaded automatically). Also, as I said, I think eo_jump
>>>> is a
>>>>>>>>>> terrible name and it should be changed to eo_step.
>>>>>>>>>>
>>>>>>>>>> Actually, reading back the thread, you didn't comment on any of my
>>>>>>>>> messages.
>>>>>>>>>> On Tue, Dec 4, 2012 at 12:13 PM, daniel.za...@samsung.com <
>>>>>>>>>> daniel.za...@samsung.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> You open gdb and you paste the function (from python to end)
>> there.
>>>>>>>>>>> After, when you encounter a eo_do function, instead of stepping
>>>> into
>>>>>> it,
>>>>>>>>>>> you call the function (just type eo_jump) and it will do the job
>>>>>> alone
>>>>>>>>>>> and reach the function that you wanted.
>>>>>>>>>>>
>>>>>>>>>>> On 12/04/2012 10:54 AM, Daniel Juyung Seo wrote:
>>>>>>>>>>>> Awesome!!!!
>>>>>>>>>>>> I and co-workers have hard time to debug with eo.
>>>>>>>>>>>> This looks very good but how can I use it?
>>>>>>>>>>>>
>>>>>>>>>>>> Daniel Juyung Seo (SeoZ)
>>>>>>>>>>>>
>>>>>>>>>>>> On Tue, Dec 4, 2012 at 5:15 PM, daniel.za...@samsung.com <
>>>>>>>>>>>> daniel.za...@samsung.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>>
>>>>>>>>>>>>> I am sure you faced difficulties to debug your program due to
>>>>>> changes
>>>>>>>>>>>>> with Eo. It is hard to know which function will be called by
>>>> eo_do
>>>>>> or
>>>>>>>>>>>>> eo_do_super because of inheritance.
>>>>>>>>>>>>>
>>>>>>>>>>>>> I have written a python function for gdb that helps a lot. The
>>>>>> command
>>>>>>>>>>>>> is eo_jump, no arguments.
>>>>>>>>>>>>> You can execute it when you reach some eo_do/eo_do_super... and
>>>> it
>>>>>>>>> will
>>>>>>>>>>>>> jump over Eo code.
>>>>>>>>>>>>>
>>>>>>>>>>>>> This is a prototype so sorry for the potential bugs.
>>>>>>>>>>>>>
>>>>>>>>>>>>> For those who will look at this function, you can note some
>> check
>>>>>> that
>>>>>>>>>>>>> the function is None, it is because Eo calls for memcpy. In
>> this
>>>>>> case,
>>>>>>>>>>>>> we want it to not stop on this so we have to continue
>> searching.
>>>>>>>>>>>>> Feel free to change, propose, hate this script :)
>>>>>>>>>>>>>
>>>>>>>>>>>>> Daniel (JackDanielZ)
>>>>>>>>>>>>>
>>>>>>>>>>>>> Function:
>>>>>>>>>>>>> python
>>>>>>>>>>>>> class Eo_jump(gdb.Command):
>>>>>>>>>>>>>           def __init__(self):
>>>>>>>>>>>>>              gdb.Command.__init__(self, "eo_jump",
>>>>>> gdb.COMMAND_OBSCURE)
>>>>>>>>>>>>>           def invoke (self, arg, from_tty):
>>>>>>>>>>>>>              while True:
>>>>>>>>>>>>>                 gdb.execute("step")
>>>>>>>>>>>>>                 self.priv_filename =
>>>>>>>>>>>>> gdb.selected_frame().find_sal().symtab.filename
>>>>>>>>>>>>>                 self.priv_function =
>>>> gdb.selected_frame().function()
>>>>>>>>>>>>>                 if (self.priv_filename != "lib/eo/eo.c") and
>>>>>>>>>>>>> (self.priv_function != None):
>>>>>>>>>>>>>                    break
>>>>>>>>>>>>>                 if (self.priv_filename == "lib/eo/eo.c"):
>>>>>>>>>>>>>                    gdb.execute("step")
>>>>>>>>>>>>>                 if (self.priv_function == None):
>>>>>>>>>>>>>                    gdb.execute("finish")
>>>>>>>>>>>>> Eo_jump()
>>>>>>>>>>>>> end
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>> ------------------------------------------------------------------------------
>>>>>>>>>>>>> LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free
>>>> Trial
>>>>>>>>>>>>> Remotely access PCs and mobile devices and provide instant
>>>> support
>>>>>>>>>>>>> Improve your efficiency, and focus on delivering more value-add
>>>>>>>>> services
>>>>>>>>>>>>> Discover what IT Professionals Know. Rescue delivers
>>>>>>>>>>>>> http://p.sf.net/sfu/logmein_12329d2d
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> enlightenment-devel mailing list
>>>>>>>>>>>>> enlightenment-devel@lists.sourceforge.net
>>>>>>>>>>>>>
>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>> ------------------------------------------------------------------------------
>>>>>>>>>>>> LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free
>>>> Trial
>>>>>>>>>>>> Remotely access PCs and mobile devices and provide instant
>> support
>>>>>>>>>>>> Improve your efficiency, and focus on delivering more value-add
>>>>>>>>> services
>>>>>>>>>>>> Discover what IT Professionals Know. Rescue delivers
>>>>>>>>>>>> http://p.sf.net/sfu/logmein_12329d2d
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> enlightenment-devel mailing list
>>>>>>>>>>>> enlightenment-devel@lists.sourceforge.net
>>>>>>>>>>>>
>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>> ------------------------------------------------------------------------------
>>>>>>>>>>> LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free
>> Trial
>>>>>>>>>>> Remotely access PCs and mobile devices and provide instant
>> support
>>>>>>>>>>> Improve your efficiency, and focus on delivering more value-add
>>>>>> services
>>>>>>>>>>> Discover what IT Professionals Know. Rescue delivers
>>>>>>>>>>> http://p.sf.net/sfu/logmein_12329d2d
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> enlightenment-devel mailing list
>>>>>>>>>>> enlightenment-devel@lists.sourceforge.net
>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>>>>>>>>>>>
>> ------------------------------------------------------------------------------
>>>>>>>>> LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
>>>>>>>>> Remotely access PCs and mobile devices and provide instant support
>>>>>>>>> Improve your efficiency, and focus on delivering more value-add
>>>>>> services
>>>>>>>>> Discover what IT Professionals Know. Rescue delivers
>>>>>>>>> http://p.sf.net/sfu/logmein_12329d2d
>>>>>>>>> _______________________________________________
>>>>>>>>> enlightenment-devel mailing list
>>>>>>>>> enlightenment-devel@lists.sourceforge.net
>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>>>>>>>>>
>> ------------------------------------------------------------------------------
>>>>>>>> LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
>>>>>>>> Remotely access PCs and mobile devices and provide instant support
>>>>>>>> Improve your efficiency, and focus on delivering more value-add
>>>> services
>>>>>>>> Discover what IT Professionals Know. Rescue delivers
>>>>>>>> http://p.sf.net/sfu/logmein_12329d2d
>>>>>>>> _______________________________________________
>>>>>>>> enlightenment-devel mailing list
>>>>>>>> enlightenment-devel@lists.sourceforge.net
>>>>>>>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>>>>>>>>
>> ------------------------------------------------------------------------------
>>>>>>> LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
>>>>>>> Remotely access PCs and mobile devices and provide instant support
>>>>>>> Improve your efficiency, and focus on delivering more value-add
>>>> services
>>>>>>> Discover what IT Professionals Know. Rescue delivers
>>>>>>> http://p.sf.net/sfu/logmein_12329d2d
>>>>>>> _______________________________________________
>>>>>>> enlightenment-devel mailing list
>>>>>>> enlightenment-devel@lists.sourceforge.net
>>>>>>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>>>>>> --
>>>>>> Gustavo Sverzut Barbieri
>>>>>> http://profusion.mobi embedded systems
>>>>>> --------------------------------------
>>>>>> MSN: barbi...@gmail.com
>>>>>> Skype: gsbarbieri
>>>>>> Mobile: +55 (19) 9225-2202
>>>>>>
>>>>>>
>>>>>>
>> ------------------------------------------------------------------------------
>>>>>> LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
>>>>>> Remotely access PCs and mobile devices and provide instant support
>>>>>> Improve your efficiency, and focus on delivering more value-add
>> services
>>>>>> Discover what IT Professionals Know. Rescue delivers
>>>>>> http://p.sf.net/sfu/logmein_12329d2d
>>>>>> _______________________________________________
>>>>>> enlightenment-devel mailing list
>>>>>> enlightenment-devel@lists.sourceforge.net
>>>>>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>>>>>>
>>>>
>>>>
>> ------------------------------------------------------------------------------
>>>> LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
>>>> Remotely access PCs and mobile devices and provide instant support
>>>> Improve your efficiency, and focus on delivering more value-add services
>>>> Discover what IT Professionals Know. Rescue delivers
>>>> http://p.sf.net/sfu/logmein_12329d2d
>>>> _______________________________________________
>>>> enlightenment-devel mailing list
>>>> enlightenment-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>>>>
>>>
>>
>>
>> ------------------------------------------------------------------------------
>> LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
>> Remotely access PCs and mobile devices and provide instant support
>> Improve your efficiency, and focus on delivering more value-add services
>> Discover what IT Professionals Know. Rescue delivers
>> http://p.sf.net/sfu/logmein_12329d2d
>> _______________________________________________
>> enlightenment-devel mailing list
>> enlightenment-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>>
>
>


------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to