On 27.10.2010 15:07 (UTC+1), Michael Lawrence wrote:
On Sat, Oct 23, 2010 at 2:49 AM, Rainer Hurling <rhur...@gwdg.de
<mailto:rhur...@gwdg.de>> wrote:
    On 22.10.2010 22:10 (UTC+1), Rainer Hurling wrote:
        On 22.10.2010 16:18 (UTC+2), Rainer Hurling wrote:
            On 22.10.2010 14:57 (UTC+1), Michael Lawrence wrote:

                On Thu, Oct 21, 2010 at 9:42 AM, Rainer Hurling
                <rhur...@gwdg.de <mailto:rhur...@gwdg.de>
                <mailto:rhur...@gwdg.de <mailto:rhur...@gwdg.de>>> wrote:

                [moved from R-help]

                On 21.10.2010 18:09 (UTC+1), Prof Brian Ripley wrote:

                If you do R CMD INSTALL --no-test-load this will skip
                the part
                that is
                hanging and you can try loading in stages (e.g. dyn.load
                on the
                RGtk2.so).

                With '--no-test-load' it installs and ends normal.
                Loading per
                dyn.load("RGtk2.so") works, just as
                dyn.load("RGtk2.so",F) and
                dyn.load("RGtk2.so",,F). Unloading works, too.

                Normal loading over library(RGtk2) within R does not
                work. R than is
                hanging.

                It seems the problem is not with the library itself?

                It looks like something is happening when initializing
                GTK+ and the
                event loop. This happens in the function R_gtkInit in
                Rgtk.c. If you
                could run R -d gdb and break on that function, perhaps
                you could step
                through until it hangs.

            Michael, thank you for answering. As I wrote earlier (on
            R-help@),
            unfortunately I have no experience with debugging (I am not a
            programmer). So I would need some more assistence.

            Is there a difference between 'library(RGtk2)' and
            'dyn.load(RGtk2)' in
            initializing GTK+? I am able to dyn.load, but library does
            not work.

            After starting with 'R -d gdb' is the following right?

            (gdb) break R_gtkInit
            Function "R_gtkInit" not defined.
            Make breakpoint pending on future shared library load? (y or
            [n]) y
            Breakpoint 1 (R_gtkInit) pending.

            When I try to proceed, it gives me the following message

            (gdb) run
            Starting program: /usr/local/lib/R/bin/exec/R
            /libexec/ld-elf.so.1: Shared object "libRblas.so" not found,
            required by "R"
            Program exited with code 01.

        Ok, I am one step further now:

        (gdb) run
        Starting program: /usr/local/lib/R/bin/exec/R
        [..SNIP..]
         > library(RGtk2)
        [New LWP 100174]
        Breakpoint 2 at 0x318bd490: file Rgtk.c, line 104.
        Pending breakpoint "R_gtkInit" resolved
        [New Thread 2f408b00 (LWP 100174)]
        [Switching to Thread 2f408b00 (LWP 100174)]

        Breakpoint 2, R_gtkInit (rargc=0x30b11d10, rargv=0x30a98458,
        success=0x30afbad0) at Rgtk.c:104
        104 Rgtk.c: No such file or directory.
        in Rgtk.c
        (gdb)

        What do you suggest I should do next?

    Rgtk.c was not found from gdb because RGtk2 was not build with
    DEBUG=T and R_KEEP_PKG_SOURCE=yes.

    So this is the next try. I can trace the code until it hangs:

    library(RGtk2)
    [New LWP 100250]
    Breakpoint 2 at 0x458bd490: file Rgtk.c, line 104.

    Pending breakpoint "R_gtkInit" resolved
    [New Thread 4322ef00 (LWP 100250)]
    [Switching to Thread 4322ef00 (LWP 100250)]

    Breakpoint 2, R_gtkInit (rargc=0x446d0980, rargv=0x44698618,
    success=0x446d09e0) at Rgtk.c:104
    104     {
    (gdb) n
    107       argc = (int) *rargc;
    (gdb) n
    104     {
    (gdb) n
    107       argc = (int) *rargc;
    (gdb) n
    109       if (!gdk_display_get_default()) {
    (gdb) n
    110         gtk_disable_setlocale();
    (gdb) n
    111         if (!gtk_init_check(&argc, &rargv)) {
    (gdb) n
    121         if (!GDK_DISPLAY()) {
    (gdb) n
    127         addInputHandler(R_InputHandlers,
    ConnectionNumber(GDK_DISPLAY()),
    (gdb) n
    132         if (!pipe(fds)) {
    (gdb) n
    133           ifd = fds[0];
    (gdb) n
    134           ofd = fds[1];
    (gdb) n
    135           addInputHandler(R_InputHandlers, ifd,
    R_gtk_timerInputHandler, 32);
    (gdb) n
    133           ifd = fds[0];
    (gdb) n
    134           ofd = fds[1];
    (gdb) n
    135           addInputHandler(R_InputHandlers, ifd,
    R_gtk_timerInputHandler, 32);
    (gdb) n
    136           if (!g_thread_supported ()) g_thread_init (NULL);
    (gdb) n
    137           g_thread_create(R_gtk_timerThreadFunc, NULL, FALSE, NULL);
    (gdb) n

    Line 138 (R_CStackLimit = -1;) is hanging. It seems there is
    something wrong with piping the file descriptor?

Thanks for looking into this. It looks like the g_thread_create line is
hanging. I wonder if your version of GTK+/GLib is not built with
threading support? But if that were the case, g_thread_init() should
have aborted. You could try breaking on the R_gtk_timerThreadFunc just
to see if the thread is executed at all or where it is hanging.


Michael, I have to thank you :-) I set a break at 'R_gtk_timerThreadFunc'. It seems this function does not return:


[..see above..]
library(RGtk2)
[New LWP 100172]
Breakpoint 2 at 0x458bd5c0: file Rgtk.c, line 78.
Pending breakpoint "R_gtk_timerThreadFunc" resolved
[New Thread 4322ef00 (LWP 100172)]
[..hanging from here on..]


Next I tried a new run with break at 'g_main_context_new' (line 79), which steps into glib-2.0.so.0, before it hangs:


library(RGtk2)
[New LWP 100195]
Breakpoint 2 at 0x47c7c660
Pending breakpoint "g_main_context_new" resolved
[New Thread 4322ef00 (LWP 100195)]
[Switching to Thread 4322ef00 (LWP 100195)]
Breakpoint 2, 0x0000000047c7c660 in g_main_context_new () from /usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_main_context_new,
which has no line number information.
0x0000000047c7aed0 in g_source_set_priority () from /usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_set_priority,
which has no line number information.
0x0000000047c7ac70 in g_main_loop_quit () from /usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_main_loop_quit,
which has no line number information.
0x0000000047c7a280 in g_source_get_context () from /usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_get_context,
which has no line number information.
0x0000000047c7c6f3 in g_main_context_new () from /usr/local/lib/libglib-2.0.so.0
(gdb) p ctx
No symbol "ctx" in current context.
(gdb) p data
No symbol "data" in current context.
(gdb) n
Single stepping until exit from function g_main_context_new,
which has no line number information.
0x0000000047c7c8b2 in g_main_context_default () from /usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_main_context_default,
which has no line number information.
0x0000000047c7dea5 in g_source_attach () from /usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_attach,
which has no line number information.
0x0000000047c79c50 in g_list_remove_link () from /usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_list_remove_link,
which has no line number information.
0x0000000047c7dde6 in g_source_attach () from /usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_attach,
which has no line number information.
0x0000000047c7ac70 in g_main_loop_quit () from /usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_main_loop_quit,
which has no line number information.
0x0000000047c7a280 in g_source_get_context () from /usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_get_context,
which has no line number information.
0x0000000047c7de00 in g_source_attach () from /usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_attach,
which has no line number information.
0x0000000047c7a280 in g_source_get_context () from /usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_get_context,
which has no line number information.
0x0000000047c7de11 in g_source_attach () from /usr/local/lib/libglib-2.0.so.0
(gdb) n
Single stepping until exit from function g_source_attach,
which has no line number information.
0x000000004608eec8 in gdk_add_client_message_filter () from /usr/local/lib/libgdk-x11-2.0.so.0
(gdb) n
Single stepping until exit from function gdk_add_client_message_filter,
which has no line number information.
[..hanging from here on..]


Is there an easy way to find out if GTK+/GLib is built with threading support?

Thanks, Rainer


Thanks again for taking the time to work on this. Sorry I have been
non-responsive.

Michael

[..mail deleted from here on..]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to