Отладка плагинов в другом потоке

В моем приложении есть система плагинов, которая позволяет пользователям разрабатывать плагины (в C / C ++ dylib) и запускать их во время выполнения (используя dlopen / dlsym).

В основном у меня есть основной поток (который рисует мой графический интерфейс) и другой поток (который является потоком плагина), который загружает / запускает плагин.

То, что я хотел бы сделать, это позволить пользователю отлаживать это плагин в XCode и поддерживать основной поток в рабочем состоянии.

Я уже знаю, что в XCode вы можете создать проект dylib и установить в Info> Launch> Wait for ??? запустить (что прекрасно работает), но проблема, с которой я столкнулся, заключается в следующем:

  1. Если пользователь останавливает отладку dylib, он закрывает главное запущенное приложение (мое приложение, которое мне не нужно, поскольку я хочу, чтобы оно продолжало работать).

  2. Он полностью останавливает основной поток приложения (графический интерфейс перестает обновляться, пока пользователь не продолжит работу).

Есть ли способ разрешить пользователям использовать XCode для разработки / отладки своих плагинов, избегая указанных выше 2 проблем?

Или мне придется интегрировать текстовый редактор и каким-то образом связать интерфейс clang ++ / lldb непосредственно внутри моего приложения, чтобы позволить пользователям разрабатывать / отлаживать (что для меня похоже на большую работу, тем более что в XCode уже есть все функции)?

ТИА!

0

Решение

У lldb есть возможность запускать все потоки, когда вы step или же next, но когда вы прервете программу (нажмите Pause), все потоки будут остановлены. У lldb в настоящее время нет никакого пользовательского интерфейса, чтобы делать то, что вы хотите — нет технических ограничений, но я не думаю, что видел сценарий использования, который требовал такого поведения. В GDB была добавлена ​​непонятная команда, thread dont-suspend-while-stepping который назначит конкретный поток и сообщит GDB, что этот поток должен запускаться всякий раз, когда отладчик выполнял шаг / соединение, но даже в том случае, когда вы прерывали программу, все потоки были бы остановлены.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]