Могу ли я получить исходный код библиотеки, упакованной с помощью менеджера пакетов Conan, чтобы иметь возможность отладки в ней?

типично Конан Пакет содержит только артефакты сборки, такие как *.dll, *.lib, *.pdb, *.so, *.a, *.dylib файлы, а также заголовки данных С или же C ++ библиотека. Однако иногда, когда вы отлаживаете использование кода, библиотека очень полезна, чтобы иметь возможность войти в код библиотеки и посмотреть, что происходит внутри. Например, чтобы определить, возникают ли какие-либо проблемы, из-за неправильного использования библиотеки или из-за ошибки в ней.

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

3

Решение

Есть две стратегии, которые могут работать для отладки зависимостей:

  • Заставляя его строить из источников, с --build=PkgName аргумент. При сборке пакета из исходных кодов, в зависимости от системы сборки, возможно, что двоичные артефакты ссылаются на временную папку сборки, в которой был собран пакет, и затем могут найти их и использовать для отладки. Эта стратегия может работать для сторонних пакетов, даже если они не учитывают отладку.
  • Если вы сами создаете пакеты и хотите иметь возможность напрямую отлаживать бинарный артефакт, не перестраивая его из источника, то правильным способом будет также упаковать исходные коды. Если отладчику нужна помощь в поиске этих источников, его следует использовать.

С gdb Вы могли бы сделать что-то вроде

def build(self):
cmake = CMake(self.settings)
gcc_dbg_src = ""if self.settings.compiler == "gcc" and self.settings.build_type == "Debug":
gcc_dbg_src =  ' -DCMAKE_CXX_FLAGS="-fdebug-prefix-map=%s/hello=src"' % os.getcwd()
self.run('cmake hello %s %s' % (cmake.command_line, gcc_dbg_src))
self.run("cmake --build . %s" % cmake.build_config)

def package(self):
self.copy("*.h", dst="include", src="hello")
if self.settings.build_type == "Debug":
self.copy("*.cpp", dst="src", src="hello")
self.copy("*.lib", dst="lib", keep_path=False)
self.copy("*.a", dst="lib", keep_path=False)

Чтобы убедиться, что вы компилируете с правильными флагами, а также что исходные файлы также упакованы. Тогда, на стороне потребителя, вы можете захотеть imports .cpp файлы, так что gdb Отладчик может найти их помимо отлаживаемого двоичного файла или поиграть с вашим путем отладчика, чтобы добавить папку пакета.

В Windows, с Visual Studio, вы, вероятно, хотите упаковать .pdb файлы

3

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

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

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