отладка — сравнение профилей прогонов программы C ++, которые должны быть идентичными, для обнаружения расхождений

У меня есть двоичный файл C ++ (GNU LilyPond), который иногда генерирует разные выходные данные для одного и того же ввода. valgrinding двоичный файл не помогает отследить, где происходит этот пух, и не читает данные gprof. Что было бы очень полезно, так это инструмент профилирования, который сравнивает несколько запусков одной и той же программы на одном и том же входе и выявляет расхождение в аргументах и ​​возвращаемых значениях функций (и, возможно, даже количество вызовов функции и / или вызова каких функций). когда). Этакий интеллектуальный «diff» файл между несколькими запусками программы. Отладочные данные слишком объемны, чтобы определить их вручную, поэтому некоторые типы синтетических инструментов были бы очень полезны. Кто-нибудь знает инструмент, который может выполнить эту задачу?

2

Решение

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

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

Если вы включите как можно больше предупреждений, вы можете обнаружить некоторые формы UB, которые проникли раньше, если это является причиной.

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

0

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

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

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