В моем приложении есть система плагинов, которая позволяет пользователям разрабатывать плагины (в C / C ++ dylib) и запускать их во время выполнения (используя dlopen / dlsym).
В основном у меня есть основной поток (который рисует мой графический интерфейс) и другой поток (который является потоком плагина), который загружает / запускает плагин.
То, что я хотел бы сделать, это позволить пользователю отлаживать это плагин в XCode и поддерживать основной поток в рабочем состоянии.
Я уже знаю, что в XCode вы можете создать проект dylib и установить в Info> Launch> Wait for ??? запустить (что прекрасно работает), но проблема, с которой я столкнулся, заключается в следующем:
Если пользователь останавливает отладку dylib, он закрывает главное запущенное приложение (мое приложение, которое мне не нужно, поскольку я хочу, чтобы оно продолжало работать).
Он полностью останавливает основной поток приложения (графический интерфейс перестает обновляться, пока пользователь не продолжит работу).
Есть ли способ разрешить пользователям использовать XCode для разработки / отладки своих плагинов, избегая указанных выше 2 проблем?
Или мне придется интегрировать текстовый редактор и каким-то образом связать интерфейс clang ++ / lldb непосредственно внутри моего приложения, чтобы позволить пользователям разрабатывать / отлаживать (что для меня похоже на большую работу, тем более что в XCode уже есть все функции)?
ТИА!
У lldb есть возможность запускать все потоки, когда вы step
или же next
, но когда вы прервете программу (нажмите Pause), все потоки будут остановлены. У lldb в настоящее время нет никакого пользовательского интерфейса, чтобы делать то, что вы хотите — нет технических ограничений, но я не думаю, что видел сценарий использования, который требовал такого поведения. В GDB была добавлена непонятная команда, thread dont-suspend-while-stepping
который назначит конкретный поток и сообщит GDB, что этот поток должен запускаться всякий раз, когда отладчик выполнял шаг / соединение, но даже в том случае, когда вы прерывали программу, все потоки были бы остановлены.
Других решений пока нет …