Сопоставление исходного кода с двоичными файлами в разработке Visual Studio - PullRequest
0 голосов
/ 06 июля 2010

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

1 Ответ

0 голосов
/ 06 июля 2010

Разве Visual Studio не делает это для вас?

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

edit: также см. Параметры-> Отладка-> Общие: есть опция Требовать, чтобы исходный файл точно совпадал с исходной версией . Если этот флажок установлен, VS будет выдавать предупреждение при входе в исходный файл, который точно не соответствует двоичному файлу.

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

  • AssemblyInfo для каждого проекта содержит только описание, компанию, ... и закомментированный раздел, содержащий, например,

    //VERSION_MAJOR 2 //VERSION_MAJOR 1

    (эти файлы также проверяются в svn btw)

  • , кроме того, в каждом проекте есть файл AssemblyVersion.cs, снова содержащий закомментированный код

    //VERSION_BUILD 1223 //VERSION_QFE 10

    , а также фактические номера версий, например

    [assembly: AssemblyFileVersion ( "2.1.1223.10" )]

    (эти файлы не проверяются в SVN, но у меня есть простой скрипт для их генерации после новой проверки)

  • все мои проекты импортируют базовый проект с общими свойствами, среди которых событие предварительной сборки, которое вызывает исполняемый файл, выполняющий интересную работу: он может читать и записывать числа VERSION_XXX, а также строку AssemblyFileVersion. Предварительная сборка выглядит как

    <Exec Command="versioner -d$(ProjectDir) -f$(ProjectDir)Properties\AssemblyInfo.cs "/>

    он читает AssemblyInfo.cs для выборки основных номеров версий, читает AssemblyVersion.cs для других номеров, устанавливает BUILD в текущую версию svn главной директории проекта, увеличивает номер QFE и записывает обратно в AssemblyVersion.cs. Увеличение числа - ключ к достижению того, что вам нужно: ни у одной сборки не будет той же версии, если вы не переполните номер QFE.

Для C ++ я использую

#define VERSION_MAJOR 2

и т. Д., Которые передаются в файл ресурсов, который заполняет раздел VERSIONINFO числами.

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

...