jw-pkg/make/debugger.mk
Jan Lindemann 705b97541d debugger.mk: Fix executable detection from core file
The executable which gdb was launched with is extracted from a core file and
then transformed into an absolute path with "which". The latter failed, as by
the time it's executed, PATH has not yet been expanded. Solved by using the
executable name only, which then gets searched in the PATH by gdb.

Signed-off-by: Jan Lindemann <jan@janware.com>
2017-08-20 08:59:59 +00:00

78 lines
1.6 KiB
Makefile

ifeq "$(COMPILER_SUITE)" "gcc"
DEBUGGER = gdb
endif
ifeq "$(COMPILER_SUITE)" "clang"
DEBUGGER = lldb
endif
CORE_DUMPER = $(shell echo -e "quit" | $(DEBUGGER) --core=$(CORE) 2>&1 | \
$(SED) '/Core was generated/ !d; s/Core was generated by `//; s/ .*//')
ifeq ($(CORE_DUMPER),)
CORE_DUMPER = $(EXE_PATH)
endif
PID = $(shell pidof $(EXE_PATH))
all:
gdb ddd:
ifneq ($(CORE),)
$@ --core=$(firstword $(CORE)) --args $(CORE_DUMPER) $(EXE_ARGS)
else
$@ --args $(CORE_DUMPER) $(EXE_ARGS)
endif
lldb:
ifneq ($(CORE),)
$@ --core $(firstword $(CORE)) -f $(CORE_DUMPER) -- $(EXE_ARGS)
else
$@ -f $(CORE_DUMPER) -- $(EXE_ARGS)
endif
kdbg:
$@ $(CORE_DUMPER) $(firstword $(CORE)) -a "$(EXE_ARGS)"
cgdb:
ifneq ($(CORE),)
$@ -- --core=$(firstword $(CORE)) --args $(CORE_DUMPER) $(EXE_ARGS)
else
$@ -- --args $(CORE_DUMPER) $(EXE_ARGS)
endif
attach:
$(DEBUGGER) $(EXE_PATH) -p $(PID)
attach-lldb:
lldb $(EXE_PATH) -p $(PID)
attach-gdb:
gdb $(EXE_PATH) -p $(PID)
attach-ddd:
ddd $(EXE_PATH) -p $(PID)
attach-strace:
strace -f $(EXE_PATH) -p $(PID)
report:
generate-coredump-report.sh -l
mkdir -p crashes
if ls *core*.txt.bz2* >/dev/null 2>&1; then mv *core*.txt.bz2 crashes/; fi
view-report:
less `ls -rt crashes/*core*.txt.bz2 | tail -1`
localcore:
echo core.%h.%e.%p | sudo tee /proc/sys/kernel/core_pattern
cp `ls -rt /var/cores/*core* 2>/dev/null | tail -1` .
centralcore:
echo /var/cores/core.%h.%e.%p | sudo tee /proc/sys/kernel/core_pattern
coreclean: centralcore-clean
centralcore-clean:
rm -f /var/cores/core* /var/cores/vgcore* || exit 0
echo-pid:
@echo PID = $(PID)