Создать дамп ядра при запуске программы с помощью sudo?

2521
Catskul

Ядра, по-видимому, не сбрасываются при использовании, sudoнесмотря на ulimit -cто, что они установлены на неограниченное количество Есть ли способ обойти это?

1

2 ответа на вопрос

3
Ambroz Bizjak

sudo сбросит настройки дампа ядра, как это происходит для многих других состояний среды. Вы можете запустить программу через помощника, который сначала включает дамп ядра, а затем запускает программу. Создайте, например, обертку, /usr/local/bin/coredumpа затем chmod +x:

$ cat /usr/local/bin/coredump  #!/bin/sh ulimit -c unlimited exec "$@" 

затем

sudo /usr/local/bin/coredump /your/crashing/program 
Я обнаружил, что даже если для ulimit -c установлено значение unlimited, sudo su для root по-прежнему не будет генерировать ядро. Catskul 12 лет назад 0
Да, я уже упоминал, что sudo будет сбрасывать настройки дампа ядра. Вы должны сделать "ulimit -c безлимитный" после sudo. Ambroz Bizjak 12 лет назад 0
Это то, что я говорил. Повторив рут с помощью `sudo su`, затем установив ограничение ядра на` unlimited`, ядро ​​все равно не получится. Это больше не проблема после работы с sysctl, но, несмотря на то, что поведение suid_dumpable хорошо документировано, по некоторым причинам оно кажется не таким последовательным на практике. Catskul 12 лет назад 0
0
Catskul

Кажется, это можно сделать с помощью опции -s, например:

sudo -s "ulimit -c unlimited; ./segfaultProg" 

Однако 2 предостережения:

  1. Вам может понадобиться установить suid_dumpableпараметр сsysctl -w kernel.suid_dumpable=2
  2. Возможно, вам придется убрать старое ядро ​​с пути. По-видимому, существуют специальные правила, в которых он может отказаться писать ядро, если установлен бит suid, и там уже есть ядро.

Подробности смотрите ниже:

http://www.randombugs.com/linux/core-dumps-linux.html