Резюме
Используйте контроль исходного кода и следите за тем, из какой версии исходного кода собран исполняемый файл ... он должен записать это в вывод, чтобы вы всегда могли сделать перекрестную ссылку на два, извлечь те же исходные коды и перестроить исполняемый файл, который дал вам эти результаты и т.д ..
Обсуждение
Желаемой строкой является либо умножение на число (в подфункции группы while), либо печать строки в конкретном случае (оператор if)
Мне это нужно, потому что я провожу несколько симуляций MD, и иногда я оказываюсь в ситуации, когда я не уверен в условиях.
В самом простом случае, когда вы хотите, чтобы во всех симуляциях MD выполнялся последний исходный код, вы можете сравнить временные метки исходных файлов с исполняемым файлом, чтобы убедиться, что вы забыли перекомпилировать, сравнить время начала процесса (например, как указано в списке). ps) со временем создания исполняемого файла.
Если вы намеренно развертываете несколько версий программы и используете только самый последний источник, тогда это становится довольно сложно. Умножение обычно генерирует только одну инструкцию машинного кода ... если у вас нет некоторого понимания контекста, вы вряд ли узнаете, какое умножение является значительным (или если оно отсутствует). Компилятор может генерировать свои собственные умножения, например, для индексирование массива, и иногда может оптимизировать умножения в битовые сдвиги (или ничего, как комментирует Ира), так что это не так просто, как сказать: «Ну, это мое единственное умножение в функции« X »». Если вы печатаете определенную строку, которую легче распознать ... если есть уникальный строковый литерал, вы можете найти его в исполняемом файле (например, puts("Hello")
-> strings program | grep Hello
, хотя это может привести и к другим совпадениям, и компилятору разрешено многократное использование строковых литеральных последовательностей, так что «Well Hello» может удовлетворить ваши потребности через указатель на «H»). Если задействован новый внешний символ, вы можете увидеть его в выводе nm
и т. Д.
Все это говорит (вау) ... ты должен действительно сделать что-то совсем другое. Лучше всего использовать систему контроля версий (например, svn, cvs ...) и настроить ее так, чтобы вы могли что-то сделать, чтобы выяснить, какая ревизия кодовой базы использовалась для создания исполняемого файла - это должно быть FAQ для любой ревизии. система управления.
Если это не удастся, вы можете, например, сделать что-то, чтобы распечатать, какие множители или условия использовала программа, когда она запускалась, записав это в свои журналы. Несмотря на то, что макросы являются хакерскими, вы можете «структурировать» их параметры, чтобы вы могли что-то регистрировать и выполнять, не вводя весь код дважды. Много других вариантов тоже.
Надеюсь, что это поможет ...