Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
47 / 31 / 21
Регистрация: 04.04.2016
Сообщений: 209

Принцип работы отладчика в Linux и fork()

24.04.2016, 12:09. Показов 2497. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем!
Вопрос к знатокам Линукс и UNIX-подобных систем.
Дайте пожалуйста ссылки, где можно кратко и доступно прочитать о таких вот вещах
(ибо с наскоку через гугл не получилось найти краткий вразумительный ответ), либо, если не затруднит напишите ответ:

1. Принцип работы отладчика в Линукс. Очень поверхностно. Конкретно интересует вопрос, как работает break-point.
Нашел кучу информации, как им пользоваться, но ничего конкретного о его принципе работы.
Могу только предположить, что отлаживаемое приложение запускается дочерним процессом под отладчиком и по достижении брейка, тот его прерывает (т.е. это не хардварная трассировка, используя возможности процессора, а программная эмуляция).

2. Если бряк поставить в функцию, которая находится в динамически подключаемой библиотеке, сработает ли она и смогут ли в момент отладки использовать эту библиотеку другие приложения? Почему?

3. Сколько напечатает точек программа и почему?
C
1
2
3
4
5
6
7
8
9
10
int main ()
{
  int i;
 
  for (i = 0; i < 2; i ++) {
    fork();
    printf (“.”);
  }
  return 0;
}
т.е. необходимо вкратце пояснить принцип работы системного вызова fork() (порождение дочернего процесса).
Я так полагаю, будет порождено 2 дочки, которые и напечатают 2 точки, а сам родитель печатать ничего не будет. Но это чисто интуитивное предположение. Если кто-то хорошо знает тему, дайте, пжл. ссылку или кратко поясните.

Спасибо за ответы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.04.2016, 12:09
Ответы с готовыми решениями:

Cобытийность. Принцип использования и принцип работы событий в jQ и GCT
Добрый день. Подготавливаюсь к собеседованию по чеклисту и не могу найти ответ на вопрос: событийность. Принцип использования и принцип...

С++ под Linux, процессы fork() и каналы
Вот такая штука... Нужно, так сказать, организовать общение между процессами через полудуплексный неименованный канал =) Научился...

Клиент-сервер TCP для Linux с fork
Помогите написать клиент серверную программу TCP для Linux с fork. Демонстрация должна быть такая: к серверу подключается несколько...

7
Заблокирован
24.04.2016, 12:22
1. http://eli.thegreenplace.net/2... reakpoints
2. Конечно, сработает. Другие приложения смогут использовать ее. Потому после установки бряки, ты будешь работать со своей копией библиотеки. Читай про Copy-On-Write.
3. А вот это уже совсем не интересно. Скомпилируй сам, да запусти.
1
47 / 31 / 21
Регистрация: 04.04.2016
Сообщений: 209
24.04.2016, 13:13  [ТС]
ко 2 вопросу.
Прошу прощения за наглость, а разве динамические библиотеки не являются разделяемыми?.. Или Вы хотите сказать, что создаются отдельные копии динамических библиотек для каждого процесса?
3. Тут вопрос не интереса, а того, что передо мной поставили вопрос и мне надо на него ответить. ) Поэтому важно именно разобраться в механизме.
Напечатаются 4 точки. т.е. 2 точки напечатает родитель и 2 точки напечатают 2 (или все-таки одна?) дочка.. Сколько все-таки дочек порождается, до какого момента они работают(места в программе) и чем обуславливается их завершение?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.04.2016, 13:23
Цитата Сообщение от Pink_Pank Посмотреть сообщение
Конкретно интересует вопрос, как работает break-point
Есть два типа брейкпоинтов - программные и аппаратные

В программном случае отладчик модифицирует код исполняемой программы и в точку остановки встраивает код для вызова прерывания. Когда исполнение дойдёт до этой точки, вызовется прерывание, после чего операционная система передаст управление отладчику

В аппаратном случае в процессоре имеются специальные системные регистры, в которых можно записать адрес кода, под достижении которого требуется остановка. Специальных регистров обычно мало (в районе 4 штук), а потому когда ставится много брейкпоинтов, то всё равно приходится ставить в том числе и программные

Цитата Сообщение от Pink_Pank Посмотреть сообщение
Если бряк поставить в функцию, которая находится в динамически подключаемой библиотеке, сработает ли она и смогут ли в момент отладки использовать эту библиотеку другие приложения? Почему?
Динамическую библиотеку в память загружает динамический загрузчик. Делается это через mmap с флагами типа SHARED. Но в случае запуска приложения из-под отладчика динамический загрузчик это знает (не помню в точности, каким образом) и мапирует динамическую библиотеку с флагом PROTECTED (т.е. будет отдельная копия кодов библиотеки в памяти для данного процесса)

Цитата Сообщение от Pink_Pank Посмотреть сообщение
т.е. необходимо вкратце пояснить принцип работы системного вызова fork() (порождение дочернего процесса)
Сие описано в любой книжке по unix'у
1
47 / 31 / 21
Регистрация: 04.04.2016
Сообщений: 209
24.04.2016, 14:07  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Сие описано в любой книжке по unix'у
Успеть бы это найти и прочитать до вечеру.. )))

Спасибо за ответы

Добавлено через 11 минут
А вот еще такой вопрос. В х86 для работы отладчика используется int3 (код 0xCC). А как дело обстоит в других архитектурах? Т.е. тоже резервируется какое-то прерывание/исключение для этих целей?

Добавлено через 17 минут
C fork() вообще мутотень какая-то... Компилирую в онлайн компиляторе https://ideone.com/IAXqAb
куда ни сунь этот fork() создается полная копия процесса и выполняется весь код из него..
Странно как-то..
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.04.2016, 16:02
Цитата Сообщение от Pink_Pank Посмотреть сообщение
А как дело обстоит в других архитектурах? Т.е. тоже резервируется какое-то прерывание/исключение для этих целей?
Да. В общем случае это должна быть любая инструкция, которая вызовет в этом месте обращение к операционной системе (по сути дела прерывание) и чтобы операционная система поняла, что это не абы какое прерывание, а именно от брейкпоинта. Ещё один важный момент - размер инструкции, выполняющей прерывание, должен иметь размер не больше, чем минимально возможная машинная инструкция, чтобы установке брейкпоинта не могла затереть две машинные инструкции. Именно поэтому в intel'е завели специальную однобайтовую инструкцию "int 3" (а в общем случае int N, насколько я помню, двухбайтовая)
1
47 / 31 / 21
Регистрация: 04.04.2016
Сообщений: 209
24.04.2016, 16:05  [ТС]
Да, так и есть. Int N - двубайтная.

Кто-нибудь, расскажите, пожалуйста про fork();
0
650 / 403 / 76
Регистрация: 21.09.2008
Сообщений: 1,396
24.04.2016, 16:42
Цитата Сообщение от Pink_Pank Посмотреть сообщение
А вот еще такой вопрос. В х86 для работы отладчика используется int3 (код 0xCC). А как дело обстоит в других архитектурах? Т.е. тоже резервируется какое-то прерывание/исключение для этих целей?
В архитектуре PDP-11 была команда BPT (код 003, размер 16 бит, вызывает прерывание по вектору 14(8), регистр состояния процессора PSW загружается значением из ячейки с адресом 16(8)), она сродни int 3h. После прерывания процедура должна завершиться командой RTI или RTT. В первом случае будет сброшен бит трассировки и управление вернётся следующей за BPT инструкции до следующей команды BPT. Во втором случае бит трассировки останется взведённым и после исполнения следующей за BPT инструкции, снова прервётся по вектору 14(8). На этой технологии я делал нетрассируемую защиту, с саморасшифровывающимся кодом на основе генератора ПСЧ. Аппаратных отладочных регистров в архитектуре PDP-11 не было.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.04.2016, 16:42
Помогаю со студенческими работами здесь

Debian Linux - Создание процессов (дед, отец, сын), fork();
Привет всем. Появилось у меня несколько вопросов по созданию процессов. Может будете ругаться, но реально не могу понять.. Уже гугл...

Нюансы работы fork()
Всем привет. Вопрос такой. Есть программа, которая записывает себе в статические переменные важные данные. Запись процесс...

IsDebuggerPresent - отслеживание отладчика и работы в обычном режиме
Разработать программу, позволяющую отслеживать запущена она в среде отладчика или работает в обычном режиме. Если обнаружено отладчик,...

Настройка отладчика для работы с портами ввода на STK500
Описание:Имеем следующий код:.include &quot;tn2313def.yms&quot; ; Присоединение файла описаний .list ; Включение...

Выставить сразу несколько(рядом) точек прерывания работы отладчика
Вопрос такой, видимо надо будет часто так делать. Нужно сразу на ряд строк установить breakpoint. Каким хоткеем это сделать я не знаю,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru