Пусть необходимо отладить процесс, запускаемый из другого процесса и быстро завершающийся.
Пример: нужно отладить расширение PHP, PHP настроен как cgi, т.е процесс запускается при появлении запроса и быстро завершается.
В отладке поможет systemtap.
Первое, необходимо написать такой небольшой probe(php.stp):
#! /usr/bin/env stap
probe process("/opt/myphp/usr/lib64/php/modules/mymodule.so").function("check_func") {
printf("Send SIGSTOP\n")
raise(%{ SIGSTOP %})
}
probe begin {
printf("Waiting for even or Ctrl+C\n")
}
Где /opt/myphp/usr/lib64/php/modules/mymodule.so
- это путь к расширению, и check_func
- это функция, которую нужно отладить. Проверить видимость для systemtap это функции можно командой: stap -L 'process("/opt/myphp/usr/lib64/php/modules/mymodule.so").function("check_func")'
или в общем виде stap -L 'process("/opt/myphp/usr/lib64/php/modules/mymodule.so").function("*")' | grep check_func
.
Все необходимые debug пакеты должны быть установлены.
Теперь запускаем stap: stap -g php.stp
. Обязательно в режиме guru - -g
. И вызываем скрипт посредством браузера, curl, wget, lynx и т.д.
Далее ищем php процесс в статусе T
:
[~]# ps aux | grep php
root 3006 0.0 0.0 254628 3284 pts/8 S+ 19:11 0:00 curl -v test.test/eval.php
user0 3008 0.1 0.3 230480 14236 ? T 19:11 0:00 /opt/myphp/usr/bin/php-cgi
Присоединяемся к нему с помощью gdb gdb /opt/myphp/usr/bin/php-cgi --pid=3008
И выполняем такие команды:
gdb>b check_func
gdb>signal SIGCONT
gdb>n
Т.е. ставим точку остановки, можно сразу несколько и посылаем сигнал продолжения выполения программы.
Все, можно отлаживать.
Добавить комментарий
Поиск
AlexBR
Обо мне
bayrepo.info@gmail.com, все!
Репозиторий с полезными пакетами(по моему мнению):
CentOS 9
есть самописные программы и библиотеки описанные в блоге и документации, а так же последние версии используемых мною программ.
Отладчики, дизассемблеры, статические анализаторы
Блог удач и неудач. Здесь я выкладываю статьи о начинаниях которые получились и которые не получались.
youtube канал
rutube канал
Популярные теги
Электроника Схема Linux Электричество Отладка программ Моделирование C/C++ Печатная плата Практика SystemTap репозиторий AVR Тестирование gdb Микромир Микроскоп Таблицы shared-memory CNC3018 Apache PHP Octave SonarQube radare2 BayZR cmake Программатор Arduino hash-table 3D печать НейросетьАрхив
- 2024
- 2023
- 2022
- 2021
-
2020
-
Декабрь 2020
- Электронная нагрузка на полевом транзисторе
- Keyes Q37 подключение
- Управление серводвигателями на attiny13a
- Определение нажатия кнопки контроллером AVR с помощью прерывания
- Микромир из вазы с водой
- Трюки при разработке и проектировании схем с микроконтроллерами AVR
- Радионабор 433МГц. Джойстик с радиопередатчиком
- Насекомые и лужа
- Инфузории
- Микромир. Часть 1
- Использование Cutter + radare2 для исследования исполнимых файлов
- Ноябрь 2020
- Октябрь 2020
- Сентябрь 2020
- Август 2020
- Май 2020
- Январь 2020
-
Декабрь 2020
- 2019
- 2018
-
2017
- Декабрь 2017
- Сентябрь 2017
- Август 2017
- Июль 2017
- Июнь 2017
- Май 2017
- Апрель 2017
-
Март 2017
- SystemTap - часть 5. Наброски и черновики
- SystemTap - часть 4. Упрощенная версия ltrace своими руками
- SystemTap - часть 3. Напишем свой probe
- SystemTap - часть 2
- Разбор схемы моргающего диода. Практика. Электроника часть 4.
- Разбор схемы моргающего диода. Электроника часть 3
- Источник отрицательного напряжения. Электроника часть 2. Попытаюсь для себя обосновать.
- Источник отрицательного напряжения. Электроника часть 1
- Февраль 2017