[R-SIG-Mac] Debugging package code in Xcode?
murdoch at stats.uwo.ca
Wed Jul 8 17:53:40 CEST 2009
On 08/07/2009 10:20 AM, Neil Tiffin wrote:
> I am not sure that even if you answer these questions that I can help,
> but I'll try.
> How did you start gdb? What commands? Exactly what process did you
> attach to? What is in xcode and what is not?
I started R in an xterm, and ran system("ps") to find its process ID. I
also ran library(rgl) to get it loaded.
I started Xcode on a project that imports a bunch of files from R and rgl.
I started gdb by menu in Xcode: Run | Attach to process | Process ID...
This immediately breaks showing a bunch of assembler, because Xcode
doesn't know the connection between the R source and the binary. (I
have had more success doing this on a build of R I made myself, but in
this case I'm using Simon's, and I get lots of warnings in the gdb
console that it can't find the source in directories on his system named
things like /Builds/Rdev-web/QA/Simon/... . I don't want to debug R
this time, so I have ignored those. I want to debug rgl.
All of the rgl source code has been added to the Xcode project, using
Project | Add to project.
> How exactly are you trying to set the break point? And what does gdb
> respond with when you set it from the command line?
I try to set the breakpoint by clicking in the left margin of one of the
source files. I haven't tried doing it from the command line until now,
but it doesn't like the syntax I was trying. (How do you specify a
source file line number? Alternatively, how do you specify a C++
method? I can set breakpoints at C functions by name, and then Xcode
does find the right source line, but rgl is mostly C++.
> Was anything compiled from xcode?
> Was rgl.so compiled with debug symbols turned on?
I don't know: it was compiled by R CMD INSTALL rgl. I was told a
couple of years ago that symbols were included by default, but I don't
know if that's still true. I think so (based on my success with C
> Was X11gui compiled with debug symbols turned on?
It's just part of rgl, so the same answer.
> Xcode integration with gdb is a complicated situation. Just because
> xcode can see something does not really mean that gdb can see it,
> although it usually works with Apple magic. Are you indicating that
> gdb can see the source file or that xcode can see the source file?
I'm not sure who can see what. Here's the summary:
- In the gdb console, I can set a breakpoint at a C function, and
Xcode will jump to the right source line for rgl.
- I can't seem to set a breakpoint from the source display.
> Running x11, R, and rgl all in debug mode would seem a real
> challenge. Not being an x11 expert, I would also raise the question
> with people familiar with X11 debugging in Mac OS X. I would start
> with breakpoints only in rgl.so (which is probably what you are trying
> to do) and not x11gui.cpp:300.
> You might want to run gdb without xcode and see what's going on.
> You'll have to wade through a bunch of command line stuff, but you do
> get direct feedback without it being absorbed by xcode.
> On Jul 8, 2009, at 8:53 AM, Duncan Murdoch wrote:
>> Neil Tiffin wrote:
>>> You might research gdb fb command (future-break.) It allows you
>>> to set a breakpoint in code that is not loaded when the debugger
>>> is started. I believe you would have to use the debugger console
>>> not the GUI with a syntax like "fb rgl.so:function_name".
>> But it is loaded when I want to set the breakpoint. I can see the
>> source file, set a breakpoint in it, but it doesn't work. I opened
>> the gdb console (thanks for the suggestion), and I see warnings like
>> Warning - No location found for "x11gui.cpp:300"
>> when I try to set a breakpoint in rgl. How do I tell it where to
>> find the location corresponding to that file?
>> Duncan Murdoch
>>> On Jul 8, 2009, at 5:57 AM, Duncan Murdoch wrote:
>>>> I'd like to use Xcode to debug the rgl package, which is crashing
>>>> sometimes in X11 on OSX. In the past, I've done this for
>>>> debugging R itself, and have a project set up for that. I can
>>>> attach to the process ID, and then I see rgl.so is loaded, but I
>>>> can't see how to set a breakpoint in the rgl.so code.
>>>> Has anyone else done this before? Can you point me to step-by-
>>>> step instructions?
>>>> Duncan Murdoch
>>>> R-SIG-Mac mailing list
>>>> R-SIG-Mac at stat.math.ethz.ch
More information about the R-SIG-Mac