2013-06-24 2 views
0

Я хотел бы добавить общую библиотеку в процесс (я использую ptrace() для выполнения этой части), а затем получаю вывод из общей библиотеки обратно в отладчик, который я пишу используя некоторую форму IPC. Мой инстинкт использовать трубу, но только реальные требования:Настройка IPC между несвязанными процессами

  • Я не хочу, чтобы хранить все в файловой системе, чтобы облегчить общение, как это будет только продолжаться до тех пор, пока отладчик работает.
  • Я хочу портативное решение для Unix (поэтому идеально подходят системные вызовы Unix-стандарта).

Проблема я бегу в том, что, насколько я понимаю, если я называю pipe() в отладчике, нет никакого способа, чтобы пройти «отправки» конец трубы к цели процесса, и наоборот, с принимающей стороной. Я мог бы создать общую память, но я думаю, что это потребует создания файла где-нибудь, чтобы я мог ссылаться на сегмент памяти из обоих процессов. Как другие отладчики выводят вывод, когда они присоединяются к процессу после того, как он уже запущен?

+0

Любая конкретная причина, по которой вы выбрали трубы Unix?Оба кода - отладчик и бизнес-логика в сценариях? Или они на любом другом языке, таком как Java/C++? –

+0

И введенная библиотека, и отладчик находятся на C. Я выбрал каналы, потому что я использовал их в аналогичных ситуациях (то есть дочерний процесс, выводящий в оболочку, которая породила его), но я открыт и для других типов IPC. – Dan

ответ

0

Используя лучшие условия поиска показал мне этот вопрос является DUP этих ребят:

Лучшие ответы, которые мы что я искал. Вы можете использовать сокет Unix-домена, чтобы передать файловый дескриптор в другой процесс. Это может работать либо от отладчика к библиотеке, либо наоборот, но, вероятно, проще сделать отладчик к библиотеке, потому что отладчик может записать адрес сокета в целевой процесс, пока он вводит библиотеку.

Однако, как только я передаю адрес сокета в целевой процесс, я мог бы просто использовать сам сокет вместо использования дополнительного канала.

0

Я предполагаю, что вам нужна система отладки для вашего кода бизнес-логики (я имею в виду приложение). По моему опыту, эта проблема решается с помощью ниже объясненного дизайна системы. (Мой опыт в C++, я думаю, что то же самое должно быть хорошо для системы на основе C).

  1. Имейте систему регистрации (отдельный процесс). Это будет содержать - диспетчер журналов и код регистрации - который возьмет на себя ответственность за сброс журнала на жесткий диск.
  2. Каждый экземпляр приложения (процесс, выполняющийся в Unix) будет связываться с этим процессом с помощью сокетов. Таким образом, вы можете иметь свой собственный протокол обмена сообщениями и обмениваться данными с системой регистрации на основе сокетов.
  3. Позже для каждого из этих приложений есть переключатель, который может отключать/записывать журнал. Так что у вас может быть инструмент - для отправки сигнала на этот процесс для включения/выключения ведения журнала сообщений.

На высоком уровне это самый общий способ разработки системы ведения журнала. Если вам нужна какая-либо информация - сделайте комментарий. Я постараюсь ответить.

+0

Я думаю, вы неправильно поняли вопрос: я создаю отладчик и не имею доступа к источнику целевых процессов. Я все еще могу использовать сокет, как вы предлагаете для IPC, однако он не отвечает на мой вопрос. Во всяком случае, я нашел решение, которое искал, который я опубликовал в ответ. – Dan

Смежные вопросы