The officially official Devuan Forum!

You are not logged in.

#1 2022-12-28 21:11:39

geki
Member
Registered: 2019-02-04
Posts: 104  

Another way to debug the package without compiling.

Hi there, I recently updated to Devuan Daedalus and I realized today, that the volume control applet was missing from panel in my MATE desktop environment. Now then, mate-media, which packages the applet, is not available in Debian Bookworm for some crashing reason[0]. Luckily, I found compatible packages from Ubuntu Jammy Jellyfish[1].

$ ls -1 Downloads/deb/ubuntu/
mate-media_1.26.0-1_amd64.deb
mate-media-common_1.26.0-1_all.deb
mate-media-dbgsym_1.26.0-1_amd64.ddeb

And with some shell-foo I repackaged the Ubuntu deb files, removing the zstd compression.

$ cat Downloads/deb/transform_zst_to_xz.sh
#!/bin/bash

[ -f "${1}" ] || exit 1

case "${1}"
in
    *.deb) ;;
    *.ddeb) ;;
    *) exit 2 ;;
esac

run()
{
    local filepath="$(realpath "${1}")"
    local filename="$(basename "${1}")"
    local pkgname="${filename%\.*}"
    mkdir "${pkgname}"
    pushd "${pkgname}" || exit 3
    ar x "${filepath}"
    mkdir DEBIAN
    tar -C DEBIAN --zstd -xf control.tar.zst
    tar --zstd -xf data.tar.zst
    rm -f control.tar.zst data.tar.zst debian-binary
    popd >/dev/null
    dpkg-deb --build "${pkgname}"
    [ ${?} -eq 0 ] && rm -rf "${pkgname}"
}

run "${1}"
exit 0

Also get libglib and libgtk3 debug symbols from debug apt source[2]. See here:

$ cat /etc/apt/sources.list.d/debug.list 
deb http://deb.debian.org/debian-debug/ bookworm-debug main
$ apt-get install libgtk-3-0-dbgsym libglib2.0-0-dbgsym

Finally, I can do

$ gdb /usr/bin/mate-volume-control-status-icon

and wait for the crash and get a more complete backtrace with infos from glib and gtk. smile

P.S.: There are several reports upstream and downstream, but all have missing symbols from glib and gtk. I had the very same backtrace, once, without information from glib and gtk data structures. Now, I am waiting for the next crash, which did not happen again.

[0] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=971783
[1] https://launchpad.net/ubuntu/+source/mate-media
[2] https://wiki.debian.org/AutomaticDebugPackages

Last edited by geki (2022-12-28 21:20:37)

Offline

#2 2022-12-29 11:23:32

geki
Member
Registered: 2019-02-04
Posts: 104  

Re: Another way to debug the package without compiling.

Finally got a backtrace. I had played a bit with the bluetooth speaker, had cycled it on and off several times. Switched off in the end. A while later hovered the icon in the notification area on the panel.

If you got any better understanding on what frame and variables to inspect, let me know. I have it open for a while longer...

[Thread 0x7fffeffff6c0 (LWP 5100) exited]

(mate-volume-control-status-icon:2404): Gtk-WARNING **: 11:44:51.182: Calling gtk_widget_realize() on a widget that isn't inside a toplevel window is not going to work very well. Widgets must be inside a toplevel container before realizing them.

(mate-volume-control-status-icon:2404): GLib-GObject-CRITICAL **: 11:44:51.182: g_object_ref: assertion 'G_IS_OBJECT (object)' failed

(mate-volume-control-status-icon:2404): Gdk-CRITICAL **: 11:44:51.182: gdk_window_get_scale_factor: assertion 'GDK_IS_WINDOW (window)' failed
**
Gtk:ERROR:../../../gtk/gtkwidget.c:5875:gtk_widget_get_frame_clock: assertion failed: (window != NULL)
Bail out! Gtk:ERROR:../../../gtk/gtkwidget.c:5875:gtk_widget_get_frame_clock: assertion failed: (window != NULL)

Thread 1 "mate-volume-con" received signal SIGABRT, Aborted.
0x00007ffff702accc in ?? () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) bt full
#0  0x00007ffff702accc in  () at /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007ffff6fdbef2 in raise () at /lib/x86_64-linux-gnu/libc.so.6
#2  0x00007ffff6fc6472 in abort () at /lib/x86_64-linux-gnu/libc.so.6
#3  0x00007ffff719eec8 in g_assertion_message
    (domain=<optimized out>, file=0x7ffff7ab9071 "../../../gtk/gtkwidget.c", line=<optimized out>, func=<optimized out>, message=<optimized out>) at ../../../glib/gtestutils.c:3256
        lstr = "5875\000\177\000\000\000\202![\360ו\222\200H\333UUU\000\000\305y\253\367\377\177\000"
        s = 0x555555d5d200 "m\240?"
#4  0x00007ffff71fee2a in g_assertion_message_expr
    (domain=domain@entry=0x7ffff7a3f133 "Gtk", file=file@entry=0x7ffff7ab9071 "../../../gtk/gtkwidget.c", line=line@entry=5875, func=func@entry=0x7ffff7abd4f0 <__func__.214> "gtk_widget_get_frame_clock", expr=expr@entry=0x7ffff7ab79c5 "window != NULL") at ../../../glib/gtestutils.c:3282
        s = 0x55555580d600 "assertion failed: (window != NULL)"
#5  0x00007ffff796a556 in gtk_widget_get_frame_clock (widget=widget@entry=0x555555b8d220 [GtkLabel])
    at ../../../gtk/gtkwidget.c:5875
        window = <optimized out>
        __func__ = "gtk_widget_get_frame_clock"
#6  0x00007ffff797926f in gtk_widget_realize (widget=widget@entry=0x555555b8d220 [GtkLabel])
    at ../../../gtk/gtkwidget.c:5545
        priv = 0x555555b8d130
        region = <optimized out>
        __func__ = "gtk_widget_realize"
#7  0x00007ffff7979468 in gtk_widget_map (widget=0x555555b8d220 [GtkLabel]) at ../../../gtk/gtkwidget.c:5049
        priv = 0x555555b8d130
        __func__ = "gtk_widget_map"
#8  0x00007ffff76cd7c0 in gtk_box_forall
    (container=<optimized out>, include_internals=<optimized out>, callback=0x7ffff771b240 <gtk_container_map_child>, callback_data=0x0) at ../../../gtk/gtkbox.c:2678
        box = <optimized out>
        priv = 0x555555ba8060
        child = <optimized out>
        children = 0x0
#9  0x00007ffff771f69f in gtk_container_map (widget=0x555555ba8190 [GtkBox]) at ../../../gtk/gtkcontainer.c:3697
#10 0x00007ffff72ce4e0 in _g_closure_invoke_va
    (closure=closure@entry=0x5555555d7bb0, return_value=return_value@entry=0x0, instance=instance@entry=0x555555ba8190, args=args@entry=0x7fffffffd480, n_params=0, param_types=0x0) at ../../../gobject/gclosure.c:895
        marshal = 0x7ffff72ccb60 <g_type_class_meta_marshalv>
        marshal_data = 0xb8
        in_marshal = 1
        real_closure = 0x5555555d7b90
        __func__ = "_g_closure_invoke_va"
#11 0x00007ffff72e7bbf in g_signal_emit_valist
    (instance=0x555555ba8190, signal_id=38, detail=<optimized out>, var_args=var_args@entry=0x7fffffffd480)
    at ../../../gobject/gsignal.c:3456
        return_accu = <optimized out>

                      accu = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        accumulator = 0x0

                  emission = {next = 0x7fffffffd6a0, instance = 0x555555ba8190, ihint = {signal_id = 38, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 0x5555556d48b0 [GtkBox/GtkContainer/GtkWidget/GInitiallyUnowned]}
--Type <RET> for more, q to quit, c to continue without paging--
        instance_type = <optimized out>

                      emission_return = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        rtype = 0x4 [void]
        static_scope = 0
        fastpath_handler = <optimized out>
        closure = <optimized out>
        run_type = <optimized out>
        hlist = <optimized out>
        l = <optimized out>
        fastpath = <optimized out>
        instance_and_params = <optimized out>
        signal_return_type = <optimized out>
        param_values = <optimized out>
        node = <optimized out>
        i = <optimized out>
        n_params = <optimized out>
        __func__ = "g_signal_emit_valist"
#12 0x00007ffff72e7dbf in g_signal_emit
    (instance=instance@entry=0x555555ba8190, signal_id=<optimized out>, detail=detail@entry=0)
    at ../../../gobject/gsignal.c:3606

                    var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffd560, reg_save_area = 0x7fffffffd4a0}}
#13 0x00007ffff7979412 in gtk_widget_map (widget=widget@entry=0x555555ba8190 [GtkBox])
    at ../../../gtk/gtkwidget.c:5051
        priv = 0x555555ba80a0
        __func__ = "gtk_widget_map"
#14 0x00007ffff7992480 in gtk_window_map (widget=0x5555557c4540 [GtkTooltipWindow]) at ../../../gtk/gtkwindow.c:6316
        child = 0x555555ba8190 [GtkBox]
        window = 0x5555557c4540 [GtkTooltipWindow]
        priv = 0x5555557c42e0
        gdk_window = <optimized out>
        link = <optimized out>
        display = <optimized out>
#15 0x00007ffff72ce5a9 in _g_closure_invoke_va
    (closure=closure@entry=0x5555555d7bb0, return_value=return_value@entry=0x0, instance=instance@entry=0x5555557c4540, args=args@entry=0x7fffffffd7a0, n_params=0, param_types=0x0) at ../../../gobject/gclosure.c:895
        marshal = 0x7ffff72ccb60 <g_type_class_meta_marshalv>
        marshal_data = 0xb8
        in_marshal = 0
        real_closure = 0x5555555d7b90
        __func__ = "_g_closure_invoke_va"
#16 0x00007ffff72e7bbf in g_signal_emit_valist
    (instance=0x5555557c4540, signal_id=38, detail=<optimized out>, var_args=var_args@entry=0x7fffffffd7a0)
    at ../../../gobject/gsignal.c:3456
        return_accu = <optimized out>

                      accu = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        accumulator = 0x0

--Type <RET> for more, q to quit, c to continue without paging--
                  emission = {next = 0x7fffffffd9d0, instance = 0x5555557c4540, ihint = {signal_id = 38, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 0x555555bf4ee0 [GtkTooltipWindow/GtkWindow/GtkBin/GtkContainer/GtkWidget/GInitiallyUnowned]}
        instance_type = <optimized out>

                      emission_return = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        rtype = 0x4 [void]
        static_scope = 0
        fastpath_handler = <optimized out>
        closure = <optimized out>
        run_type = <optimized out>
        hlist = <optimized out>
        l = <optimized out>
        fastpath = <optimized out>
        instance_and_params = <optimized out>
        signal_return_type = <optimized out>
        param_values = <optimized out>
        node = <optimized out>
        i = <optimized out>
        n_params = <optimized out>
        __func__ = "g_signal_emit_valist"
#17 0x00007ffff72e7dbf in g_signal_emit
    (instance=instance@entry=0x5555557c4540, signal_id=<optimized out>, detail=detail@entry=0)
    at ../../../gobject/gsignal.c:3606

                    var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffd880, reg_save_area = 0x7fffffffd7c0}}
#18 0x00007ffff7979412 in gtk_widget_map (widget=widget@entry=0x5555557c4540 [GtkTooltipWindow])
    at ../../../gtk/gtkwidget.c:5051
        priv = 0x5555557c4450
        __func__ = "gtk_widget_map"
#19 0x00007ffff7987fbb in gtk_window_show (widget=0x5555557c4540 [GtkTooltipWindow]) at ../../../gtk/gtkwindow.c:6211
        window = 0x5555557c4540 [GtkTooltipWindow]
        priv = 0x5555557c42e0
        container = 0x5555557c4540 [GtkTooltipWindow]
        is_plug = <optimized out>
#23 0x00007ffff72e7dbf in <emit signal ??? on instance 0x5555557c4540 [GtkTooltipWindow]>
    (instance=instance@entry=0x5555557c4540, signal_id=<optimized out>, detail=detail@entry=0)
    at ../../../gobject/gsignal.c:3606

                    var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffdcc0, reg_save_area = 0x7fffffffdc00}}
    #20 0x00007ffff72ce3b0 in g_closure_invoke
    (closure=closure@entry=0x5555555c1e50, return_value=return_value@entry=0x0, n_param_values=1, param_values=param_values@entry=0x7fffffffda60, invocation_hint=invocation_hint@entry=0x7fffffffd9e0) at ../../../gobject/gclosure.c:832
                marshal = 0x7ffff72ccca0 <g_type_class_meta_marshal>
                marshal_data = 0xa0
                in_marshal = 0
                real_closure = 0x5555555c1e30
                __func__ = "g_closure_invoke"
    #21 0x00007ffff72e0d2d in signal_emit_unlocked_R
    (node=node@entry=0x5555555c1ea0, detail=detail@entry=0, instance=instance@entry=0x5555557c4540, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffda60)
    at ../../../gobject/gsignal.c:3726
--Type <RET> for more, q to quit, c to continue without paging--
                accumulator = 0x0

                                  emission = {next = 0x0, instance = 0x5555557c4540, ihint = {signal_id = 36, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 0x555555bf4ee0 [GtkTooltipWindow/GtkWindow/GtkBin/GtkContainer/GtkWidget/GInitiallyUnowned]}
                class_closure = 0x5555555c1e50
                hlist = <optimized out>
                handler_list = <optimized out>
                return_accu = 0x0

                                      accu = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
                signal_id = 36
                max_sequential_handler_number = 2484
                return_value_altered = <optimized out>
    #22 0x00007ffff72e7bf5 in g_signal_emit_valist
    (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fffffffdbe0) at ../../../gobject/gsignal.c:3549
                instance_and_params = 0x7fffffffda60
                signal_return_type = <optimized out>
                param_values = 0x7fffffffda78
                node = <optimized out>
                i = <optimized out>
                n_params = <optimized out>
                __func__ = "g_signal_emit_valist"
#24 0x00007ffff7973186 in gtk_widget_show (widget=0x5555557c4540 [GtkTooltipWindow]) at ../../../gtk/gtkwidget.c:4852
        parent = 0x0
        __func__ = "gtk_widget_show"
#25 0x00007ffff7924e15 in gtk_tooltip_position
    (device=<optimized out>, new_tooltip_widget=<optimized out>, display=0x555555688820 [GtkTrayIcon], tooltip=0x555555cac510 [GtkTooltip]) at ../../../gtk/gtktooltip.c:980
        window = 0x555555bca030 [GdkX11Window]
        screen = 0x5555555a2020 [GdkX11Screen]
        anchor_rect = {x = -4, y = -4, width = 36, height = 32}
        rect_anchor_dx = 0
        cursor_size = 32
        settings = <optimized out>
        widget_window = <optimized out>
        effective_toplevel = <optimized out>
        toplevel = 0x555555688820 [GtkTrayIcon]
        anchor_rect_padding = <optimized out>
        x = 21
        y = 15
        screen = <optimized out>
        device = <optimized out>
        window = <optimized out>
        tooltip_widget = 0x555555688820 [GtkTrayIcon]
        tooltip = 0x555555cac510 [GtkTooltip]
        return_value = <optimized out>
#26 gtk_tooltip_show_tooltip (display=display@entry=0x55555559c0e0 [GdkX11Display]) at ../../../gtk/gtktooltip.c:1050
        x = 21
        y = 15
        screen = <optimized out>
--Type <RET> for more, q to quit, c to continue without paging--
        device = <optimized out>
        window = <optimized out>
        tooltip_widget = 0x555555688820 [GtkTrayIcon]
        tooltip = 0x555555cac510 [GtkTooltip]
        return_value = <optimized out>
#27 0x00007ffff7925011 in tooltip_popup_timeout (data=<optimized out>) at ../../../gtk/gtktooltip.c:1128
        display = 0x55555559c0e0 [GdkX11Display]
        tooltip = 0x555555cac510 [GtkTooltip]
#28 0x00007ffff7526b47 in gdk_threads_dispatch (data=0x5555558f20e0) at ../../../gdk/gdk.c:769
        dispatch = 0x5555558f20e0
        ret = 0
#29 0x00007ffff71d619a in g_timeout_dispatch
    (source=0x5555558c1f00, callback=<optimized out>, user_data=<optimized out>) at ../../../glib/gmain.c:5007
        timeout_source = 0x5555558c1f00
        again = <optimized out>
#30 0x00007ffff71d567f in g_main_dispatch (context=0x5555555c3b60) at ../../../glib/gmain.c:3444
        dispatch = 0x7ffff71d6170 <g_timeout_dispatch>
        prev_source = 0x0
        begin_time_nsec = 0
        was_in_call = 0
        user_data = 0x5555558f20e0
        callback = 0x7ffff7526b20 <gdk_threads_dispatch>
        cb_funcs = <optimized out>
        cb_data = 0x555555d0afd0
        need_destroy = <optimized out>
        source = 0x5555558c1f00
        current = 0x5555556248c0
        i = 0
        __func__ = "g_main_dispatch"
#31 g_main_context_dispatch (context=0x5555555c3b60) at ../../../glib/gmain.c:4162
#32 0x00007ffff71d5a38 in g_main_context_iterate
    (context=0x5555555c3b60, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
    at ../../../glib/gmain.c:4238
        max_priority = 2147483647
        timeout = 500
        some_ready = 1
        nfds = <optimized out>
        allocated_nfds = 5
        fds = 0x55555561a1d0
#33 0x00007ffff71d5cef in g_main_loop_run (loop=0x5555556ef1f0) at ../../../glib/gmain.c:4438
        __func__ = "g_main_loop_run"
#34 0x00007ffff7807bf5 in gtk_main () at ../../../gtk/gtkmain.c:1329
        loop = 0x5555556ef1f0
#35 0x000055555555ac67 in main (argc=<optimized out>, argv=<optimized out>)
    at ./mate-volume-control/status-icon-main.c:95
        error = 0x0
        status_icon = 0x555555819c30 [GvcStatusIcon]
        app = 0x5555555cb220 [GApplication]

                    entries = {{long_name = 0x55555556032a "version", short_name = 118 'v', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0x555555564140 <show_version>, description = 0x555555560460 "Version of this application", arg_description = 0x0}, {long_name = 0x555555560483 "debug", short_name = 100 'd', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0x55555556413c <debug>, description = 0x55555556047c "Enable debug", arg_description = 0x0}, {long_name = 0x0, short_name = 0 '\000', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0x0, description = 0x0, arg_description = 0x0}}
(gdb)

Offline

#3 2022-12-29 11:35:00

Head_on_a_Stick
Member
From: London
Registered: 2019-03-24
Posts: 3,125  
Website

Re: Another way to debug the package without compiling.

geki wrote:

Now then, mate-media, which packages the applet, is not available in Debian Bookworm for some crashing reason[0]. Luckily, I found compatible packages from Ubuntu Jammy Jellyfish

Why didn't you try the version from unstable?

geki wrote:

There are several reports upstream and downstream, but all have missing symbols from glib and gtk

This one seems to have those: https://github.com/mate-desktop/mate-me … -819028411

I think this would be better pursued in the bug report(s) rather than here. Sorry but I can't help otherwise.

EDIT: did you see the suggested workaround? The volumeicon-alsa package should also work in MATE if you can't get the native volume systray thingie working.

Last edited by Head_on_a_Stick (2022-12-29 11:43:45)


Brianna Ghey — Rest In Power

Offline

#4 2022-12-29 11:42:32

geki
Member
Registered: 2019-02-04
Posts: 104  

Re: Another way to debug the package without compiling.

Hi Head_on_a_Stick and thanks for your input! I did not know about the debug apt sources at that time. I guess there would have been a dbgsym package for mate-media, too. big_smile Well, now I can get Ubuntu packages installed on Debian based distros, hah.

The backtrace frames are empty like all the others, example snipped:

#22 0x00007ffff792c510 in  () at /usr/lib/libgtk-3.so.0
#23 0x00007ffff792c709 in  () at /usr/lib/libgtk-3.so.0

Mine have far more infos. I will check this evening, if I can get something out of the backtrace, heh. And yes, I reported my backtrace to the debian bug report.

Offline

Board footer