У меня есть одна программа на C ++ с двумя версиями, одна версия работает, а другая нет.
Есть ли способ отладить разницу между этими двумя версиями? В частности, я использую Linux и g ++. Есть ли способ использовать что-то вроде KCachegrind посмотреть разницу Кол-во звонков? Или что-то в gdb для более быстрого просмотра различий в вызовах этих функций?
Обновление …
Программа предназначена для просмотра всех отличий. Во-первых, я хотел бы узнать путь между различиями в вызовах функций, после чего у меня будет возможность выполнить команду diff только в этих функциях.
Вы рассматривали возможность использования gprof? После того, как вы установили его (я полагаю, что в большинстве основных дистрибутивов он есть по умолчанию) скомпилируйте ваш код с опцией ‘-pg’. Когда вы запускаете свой исполняемый файл, он генерирует файл gmon.out, который содержит информацию о профилировании, включая граф вызовов.
Посмотри на этот урок чтобы получить лучшее представление о том, как это работает.
Я бы порекомендовал написать простейшие рабочие тестовые данные, которые приводят к сбою в новой версии, но в предыдущей версии это удается. Когда у вас есть этот тестовый пример, соберите промежуточную версию из различных промежуточных коммитов в вашем исходном репозитории (я бы предложил выполнить бинарный поиск, чтобы ограничить количество перекомпиляций, git bisect
отличный инструмент, если вы используете git
).
После того, как вы изолировали ошибочный коммит, присмотритесь к нему или, если необходимо, воспользуйтесь отладчиком, чтобы отследить ваш код с помощью тестового ввода. Надеюсь, вам нужно было внести сравнительно небольшое изменение для подтверждения.
самое близкое к этому использование gdb — это многопроцессная отладка [1] с некоторыми пользовательскими сценариями gdb и python есть как минимум один такой пример использования gdb таким образом [2]
Думаю, вряд ли получится так, как ты хочешь, как есть. Хотя, если вы решили использовать GDB таким образом, это может дать вам некоторые идеи.
[1] http://sourceware.org/gdb/current/onlinedocs/gdb/Inferiors-and-Programs.html#Inferiors-and-Programs [2] http://gitorious.org/misc-gdb-stuff/misc-gdb-stuff/trees/master/misc_gdb/lockstep