Использование дампа стека из исполняемого файла Cygwin

Поэтому я написал глючный код, который иногда дает сбой... и создает файл дампа стека.

Используя addr2line, я могу выяснить, как программа попала в точку краха, расшифровав адреса по одному. Есть ли альтернативный инструмент, который может упростить отладку с помощью дампов стека? Есть ли способ загрузить эту информацию в Insight/Gdb?


person Gerhard    schedule 26.11.2008    source источник


Ответы (2)


Вы можете указать Cygwin запускать отладчик gdb как раз в момент возникновения ошибки. Для этого добавьте error_start=action в переменную среды Cygwin:
export CYGWIN="$CYGWIN error_start=gdb -nw %1 %2"

В противном случае Cygwin может сгенерировать реальный дамп ядра.
export CYGWIN="$CYGWIN error_start=dumper -d %1 %2"

person Gerhard    schedule 06.01.2009
comment
И запустите gdb path/to/the/binary path/to/the/core для отладки. Благодаря stackoverflow.com/a/5115653/204658. - person thoni56; 27.02.2016
comment
Если эта опция error_start=gdb -nw %1 %2 включена, у меня работает gdb, однако выход из gdb просто приводит к тому, что он снова запускается, как мне полностью выйти из него? - person CMCDragonkai; 13.01.2017
comment
Мне пришлось выйти на улицу и запустить проводник процессов и убить все дерево процессов в Windows. - person CMCDragonkai; 13.01.2017
comment
@CMCDragonkai Для справки в будущем вы можете просто ввести kill в gdb, чтобы завершить отлаживаемый процесс, а затем выйти, чтобы также выйти из gdb. - person Anonymous1847; 11.08.2020

Во-первых, убедитесь, что вы строите с включенной отладкой исходного кода (используя опцию -g):

gcc -g -o myfile myfile.c

Затем загрузите дамп в gdb после сбоя (или инсайта, или ддда)

gdb myfile core
person BenB    schedule 26.11.2008
comment
gdb говорит, что не распознает файл (с суффиксом .stackdump) как дамп ядра. - person Anonymous1847; 11.08.2020