Hello Awtul,
not being the maintainer for olwm I tried to shed shome light to it
and describe some ways to get more informations out of it.
(Even when olwm got removed from testing.)
--------
First one can install the systemd facility to collect coredumps:
apt install systemd-coredump gdb
Also installing the packages containing the debug informations for
the official debian packages can offer better backtraces.
# add sources: deb http://debug.mirrors.debian.org/debian-debug/
testing-debug main
apt-get update
apt-get install olwm-dbgsym
(See https://wiki.debian.org/AutomaticDebugPackages)
Then one can login again to produce another crash and then something
like following should be possible:
# coredumpctl list
TIME PID UID GID SIG COREFILE EXE
Fri 2017-03-10 10:53:11 CET 733 1000 1000 11 present /usr/bin/olwm
# coredumpctl gdb /usr/bin/olwm
(gdb) bt
#0 0x00007fa6d28a54c7 in XKeysymToKeycode () from
/usr/lib/x86_64-linux-gnu/libX11.so.6
#1 0x000055feaa11d803 in stringToModifier (dpy=0xab32d040, word=0x7ffd6852bafe
"Meta") at evbind.c:717
#2 0x000055feaa11da5d in parseKeySpec (syms=0x7ffd6852ba90,
specifier=<optimized out>, dpy=-1422733248) at evbind.c:821
#3 establishKeyBindings (dpy=dpy@entry=0x55feab32d040, rdb=0x55feab33c5c0) at
evbind.c:905
#4 0x000055feaa11e623 in InitBindings (dpy=0x55feab32d040) at evbind.c:1324
#5 0x000055feaa1196b9 in main (argc=<optimized out>, argv=<optimized out>) at
olwm.c:290
-------
Also live debugging it would be possible by these steps:
apt-get source olwm
apt install gdbserver
nano /usr/bin/olwm-x-window-manager
# Change following line
exec /usr/bin/olwm "$@"
# to this:
exec /usr/bin/gdbserver localhost:4567 /usr/bin/olwm "$@"
# Login in wdm (in my test I have a VM with xdm installed.)
# gdb -q
(gdb) target remote localhost:4567
(gdb) directory /home/benutzer/debian/orig/xview-3.2p1.4/clients/olwm
(gdb) cont
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff77084c7 in XKeysymToKeycode () from
target:/usr/lib/x86_64-linux-gnu/libX11.so.6
(gdb) bt
#0 0x00007ffff77084c7 in XKeysymToKeycode () from
target:/usr/lib/x86_64-linux-gnu/libX11.so.6
#1 0x0000555555562803 in stringToModifier (dpy=0x5579f040, word=0x7fffffffd86e
"Meta") at evbind.c:717
#2 0x0000555555562a5d in parseKeySpec (syms=0x7fffffffd800,
specifier=<optimized out>, dpy=1434054720) at evbind.c:821
#3 establishKeyBindings (dpy=dpy@entry=0x55555579f040, rdb=0x5555557ae5c0) at
evbind.c:905
#4 0x0000555555563623 in InitBindings (dpy=0x55555579f040) at evbind.c:1324
#5 0x000055555555e6b9 in main (argc=<optimized out>, argv=<optimized out>) at
olwm.c:290
(gdb) up
#1 0x0000555555562803 in stringToModifier (dpy=0x5579f040, word=0x7fffffffd86e
"Meta") at evbind.c:717
717 kc = XKeysymToKeycode(dpy, ksa->sym1);
(gdb) print dpy
$1 = (Display *) 0x5579f040
(gdb) up
#2 0x0000555555562a5d in parseKeySpec (syms=0x7fffffffd800,
specifier=<optimized out>, dpy=1434054720) at evbind.c:821
821 newmod = stringToModifier(dpy, mod_string);
(gdb) print/x dpy
$2 = 0x5579f040
(gdb) up
#3 establishKeyBindings (dpy=dpy@entry=0x55555579f040, rdb=0x5555557ae5c0) at
evbind.c:905
905 nsyms = parseKeySpec(dpy, keyspec, syms);
(gdb) print/x dpy
$3 = 0x55555579f040
-------
So here the pointer given in dpy gets truncated when given to
function parseKeySpec because the declaration misses the data type,
therefore defaulting to int.
Fixing that by following change ...
static int
parseKeySpec(dpy, specifier, syms)
+ Display *dpy;
char *specifier;
modsym *syms;
{
... still leads to another crash (related to the other bugs #855168, #852532).
-------
Adding "-Wimplicit-int" to EXTRA_CFLAGS in debian/rules would print a
warning for this, but also 1465 other places ...
Kind regards,
Bernhard