Приведу пример сборки accel-ppp с поддержкой отладочной информации, например для того чтобы выяснить причину падения.
Рекомендую посмотреть мою статью:
Сборка и установка accel-ppp
Чтобы увидеть отладочную информацию, необходимо собрать accel-ppp добавив:
-DCMAKE_BUILD_TYPE=Debug
Если нужно выявить причину утечки оперативной памяти, то добавим еще:
-DMEMDEBUG=TRUE
Допустим соберем так:
cd /opt/ git clone git://git.code.sf.net/p/accel-ppp/code accel-ppp-code mkdir /opt/accel-ppp-code/build cd /opt/accel-ppp-code/build cmake -DCMAKE_INSTALL_PREFIX=/usr -DKDIR=/usr/src/linux-headers-`uname -r` -DRADIUS=TRUE -DSHAPER=TRUE -DLOG_PGSQL=FALSE -DNETSNMP=FALSE -DLUA=TRUE -DBUILD_IPOE_DRIVER=TRUE -DBUILD_VLAN_MON_DRIVER=TRUE -DCPACK_TYPE=Ubuntu16 -DCMAKE_BUILD_TYPE=Debug /opt/accel-ppp-code make make install
В /etc/sysctl.conf добавим параметры, которыми укажем где хранить core файлы и что в имени нужно указывать имя программы и номер pid:
kernel.core_uses_pid=1 kernel.core_pattern=/root/core-%e-%p
Применим изменения:
sysctl -p
Отключим лимит на размер core файлов:
ulimit -c unlimited
Чтобы не сбросилось после перезапуска системы, добавим в /etc/security/limits.conf:
* soft core unlimited
Теперь для теста можно создать файл с кодом в котором есть ошибка:
int main() { *(char *)0 = 0; return 0; }
Компилируем:
gcc file.c
Выполняем:
./a.out
Убедится что есть ошибка segfault в dmesg:
dmesg -T
Также убедимся что в директории /root/ создался файл core-…
Теперь, аналогично при падении accel-ppp создастся core файл.
Если core файлы пустые, то нужно запустить accel-ppp в GDB:
apt install gdb gdb --args /usr/sbin/accel-pppd -p /var/run/accel-pppd.pid -c /etc/accel-ppp.conf run
Если запускать в GDB, то нужно обязательно выключить ротацию логов, иначе после ротаций нужно постоянно набирать «continue».
При необходимости я очищал логи так:
echo "" > /var/log/accel-ppp/emerg.log echo "" > /var/log/accel-ppp/auth-fail.log echo "" > /var/log/accel-ppp/accel-ppp.log
Чтобы не держать открытым терминал с GDB, запустим его в screen, чтобы можно было отключится от сервера и потом вернуться к открытому окну, например создадим окно с именем «accel»:
screen -S accel gdb --args /usr/sbin/accel-pppd -p /var/run/accel-pppd.pid -c /etc/accel-ppp.conf run
Чтобы отключиться от окна нажмем клавиши Ctrl+A D, а чтобы подключиться наберем команду:
screen -r accel
Если accel-ppp упал, то для просмотра более детальной информации выполним команды:
bt full generate-core-file
В конфигурации accel-ppp также можно включить ведение более детальных логов, например:
[radius] verbose=1 interim-verbose=1 [ipoe] verbose=1 [shaper] verbose=1 [pppd-compat] verbose=1 [log] level=5 log-debug=/var/log/accel-ppp/debug.log
Смотрите мои статьи:
Установка и использование Screen
Как обновить accel-ppp