Можно ли использовать исходный сервер (средства отладки для Windows) со статическими проектами библиотек?

Я не могу найти способ использовать инструменты исходного сервера из средств отладки для Windows в проекте статической библиотеки, который построен отдельно от решений, фактически использующих эту библиотеку: вывод "ssindex.cmd" всегда отображает "нулевой источник" "найденные файлы" для файла PDB, сгенерированного для библиотеки (с использованием опций компилятора /ZI и /Fd).

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

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

Спасибо за любые предложения!

3 ответа

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

При индексировании вашего библиотечного решения вы указываете флаг "/Save" с каталогом, в котором хранится индексная информация об исходных файлах библиотеки. Например (при условии, что вы используете Subversion для контроля версий),

ssindex.cmd /System=SVN /Save=c:\source\libproj\srcinfo /Source=c:\source\libproj /Symbols=c:\source\libproj\Release\*.pdb 

При последующем индексировании вашего проекта, который включает вашу библиотеку, вы указываете флаг "/Load" с каталогом, содержащим информацию об исходном файле библиотеки. Например,

ssindex.cmd /System=SVN /Load=c:\source\libproj\srcinfo /Source=c:\source\binproj /Symbols=c:\source\binproj\Release\*.pdb 

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

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

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

Когда запускается svnindex.cmd, он всегда говорит вам "найдены нулевые исходные файлы"

после мучительного поиска в svn.pm (модуль perl для работы с svn) я обнаружил, что:

  1. во-первых, svn.pm вызывает "svn info -R $SourceRoot" для получения всей информации о версии файлов в $SourceRoot (передается параметром /source),

  2. затем svn.pm сохраняет все файлы в словаре, который использует локальный путь к файлу в качестве ключа

  3. svnindex.cmd вызывает srctool -r для получения информации обо всех исходных файлах в *.pdb и использует имя исходного файла в качестве ключа для запроса информации, сохраненной на шаге 2

проблема в:

svn.pm использует относительный путь, но *.pdb использует абсолютный путь, поэтому вы никогда не найдете информацию о журнале svn для какого-либо файла, а затем "найдены нулевые исходные файлы"

исправить:

измените строку 162 svn.pm:

$ LocalFile = lc $ 1;

в

$LocalFile = $SourceRoot . "\" . 1 доллар США; #make path absolute

Это, вероятно, означает, что вы не указали правильные каталоги при запуске "ssindex", поэтому для ssindex вам нужно иметь: /source=C:/SourceCode/ /symbols=C:/SourceCode/bin/Debug Я не уверен, что "источник" имеет верхний регистр S или нет, но это должно быть!

Другие вопросы по тегам