Сборка Accel-ppp в debug

Приведу пример сборки 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

Также убедимся что в директории /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».
Чтобы не держать открытым терминал с 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

Смотрите мои статьи:
Установка и использование Screen
Как обновить accel-ppp

Did my article help you? How about buying me a cup of coffee as an encouragement? Buy me a coffe.

Оставьте комментарий

Добавить комментарий