Вывести полный поток управления через GDB, включая значения переменных
Идея состоит в том, что, учитывая конкретный вклад в программу, я хочу как-то автоматически войти через всю программу и вывести ее поток управления вместе со всеми данными, используемыми как классы и их переменные. Это простой способ сделать это? Или это может быть сделано с помощью сценариев над GDB или требует модификации в GDB?
Хорошо, причина этого вопроса заключается в идее относительно инструмента отладки. Что он делает, так это При наличии двух разных входов в программу, один из которых вызывает неправильный вывод, а другой - правильный, он сообщит, какая часть потока управления для них различается.
Так что я думаю, что понадобится полный дамп этих двух потоков управления, идущих в механизм сравнения. И если два входа следуют за подобными потоками управления, то их различия (во многих случаях) дают хорошее представление о том, почему существует ошибка.
Это может быть превращено в очень привлекательный инструмент со множеством функций, созданных на основе этого.
3 ответа
То, что вы описываете, немного похоже на "отладку трассировки" в gdb. Смотрите внутреннюю справку gdb "help tracepoint". Вы также можете увидеть технический документ здесь: http://sourceware.org/gdb/talks/esc-west-1999/
К сожалению, эта функциональность в настоящее время не реализована для собственной отладки, но я считаю, что CodeSourcery работает над этим.
Расскажите нам немного больше об окружающей среде. Например, dtrace сделает изумительную работу в Solaris или Leopard. gprof это еще одна возможность.
Версию этого можно сделать с помощью yes(1) или ожидаемого (1).
Если вы хотите стать модным, GDB может быть написан на Python в некоторых версиях.
Проверьте это, в отличие от Coverity, Fenris бесплатен и широко используется.
Как автоматически распечатать следующие N выполненных строк в GDB?