2013-06-04 2 views
3

Мы используем стороннюю библиотеку для нашей программы (настольное приложение, написанное на C++), библиотека защищена кодом отладки, уровнями шифрования/дешифрования, кодом мусора, вызванными исключениями и другими анти-отладки, что делает невозможным работу в режиме отладки (на Visual Studio 2010).сторонняя библиотека с кодом отладки

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

+2

Вы можете попробовать сделать две функции, которые возвращают известные результаты для набора данных. Затем вы можете протестировать приложение с данными, без библиотеки и с режимом отладки. – Djon

+0

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

ответ

2

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

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

Поскольку библиотека находится в отдельном исполняемом файле, это не помешает вам отладить вашу программу.

+0

На самом деле это звучит как хорошее решение, что вы можете сказать о производительности? А также, каково ваше мнение об использовании boost для межпроцессного общения? Вы можете сравнить его с ZeroMQ? – otto

+1

Скорость - относительное понятие, это зависит от вашего проекта. Если вас беспокоит абсолютная производительность, вы должны реализовать это решение только для целей отладки. ZeroMQ действительно быстро работает, он может использовать IPC вместо сокетов. Однако, как можно быстрее, он все еще медленнее, чем прямые вызовы. Я никогда не использовал boost interprocess comm, поэтому я не могу сравнивать. –

2

Если вы используете только несколько функций из защищенной библиотеки, вы можете создать собственную библиотеку с тем же интерфейсом, что и в защищенной lib, реализуя эти функции с некоторыми данными заглушки.

+0

Что вы имеете в виду по данным заглушки? Я не пробовал создавать новую библиотеку с таким же интерфейсом, но, на мой взгляд, это приведет к тому же, что и анти-отладочный код. – otto

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