Заставьте GDB распечатать поток управления функций, как их называют

([1-9]\d?\d?(\.\d{1,3}){2}\.\d{1,3},?)+

Немного по сравнению с Редукционистом, но это должно с ним справиться. (вам нужно будет обрезать запятые из совпадений). Отредактировано для ограничения совпадений с диапазоном 1. . . * -> 999. . . *

17
задан 2 revs, 2 users 100%callgiraffe 14 September 2009 в 11:14
поделиться

4 ответа

Вы видели превосходный anwser litb к подобному сообщению здесь ?

Он использует readelf, чтобы заставить интересные символы, gdb команды заставлять трассировку и awk склеивать все это.

В основном то, что необходимо изменить, должно изменить его gdb командный сценарий для удаления 1 глубины из следа, чтобы видеть стек и отфильтровать определенные функции и переформатировать вывод с awk/python / (...) сценарий для представления его как дерево. (Я признаю, что я слишком ленив, чтобы сделать это теперь...)

1
ответ дан 30 November 2019 в 14:21
поделиться

Можно звонить gdb в пакетный режим (использующий -x опция), повреждение, где Вы нуждаетесь и просите след (bt), тогда Вы фильтруете результат с помощью grep или egrep.

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

, Таким образом, Вы создаете файл с командами:

br <function name where to break>
run
bt
kill
quit

тогда работает gdb <program> -x<command file>

Строки фильтра, который запускается с #<digit> - Вы получаете отслеживание стека.

0
ответ дан 30 November 2019 в 14:21
поделиться

Используйте правильный инструмент для работы;)

Как автоматически напечатать следующие N выполненных строк в GDB?

2
ответ дан 30 November 2019 в 14:21
поделиться

In your case I would turn to the define command in gdb, which allows you to define a function, which can take up to 10 arguments.

You can pass in the names of functions to "trace" as arguments to the function you define, or record them all in the function itself. I'd do something like the following

define functiontrace
if $arg0
    break $arg0
    commands
        where
        continue
        end
    end

if $arg1
...

Arguments to a user-defined function in gdb are referenced as $arg0-$arg9. Alternatively, you could just record every function you wanted to trace in the function, instead of using $arg0-9.

Note: this will not indent as to depth in the stack trace, but will print the stack trace every time the function is called. I find this approach more useful than strace etc... because it will log any function you want, system, library, local, or otherwise.

8
ответ дан 30 November 2019 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: