([1-9]\d?\d?(\.\d{1,3}){2}\.\d{1,3},?)+
Немного по сравнению с Редукционистом, но это должно с ним справиться. (вам нужно будет обрезать запятые из совпадений). Отредактировано для ограничения совпадений с диапазоном 1. . . * -> 999. . . *
Вы видели превосходный anwser litb к подобному сообщению здесь ?
Он использует readelf, чтобы заставить интересные символы, gdb команды заставлять трассировку и awk склеивать все это.
В основном то, что необходимо изменить, должно изменить его gdb командный сценарий для удаления 1 глубины из следа, чтобы видеть стек и отфильтровать определенные функции и переформатировать вывод с awk/python / (...) сценарий для представления его как дерево. (Я признаю, что я слишком ленив, чтобы сделать это теперь...)
Можно звонить gdb
в пакетный режим (использующий -x
опция), повреждение, где Вы нуждаетесь и просите след (bt
), тогда Вы фильтруете результат с помощью grep
или egrep
.
Отступы являются более трудными, однако bt
, вывод заказан так, у Вас есть текущая функция наверху трассировки и main
в очень нижней части.
, Таким образом, Вы создаете файл с командами:
br <function name where to break>
run
bt
kill
quit
тогда работает gdb <program> -x<command file>
Строки фильтра, который запускается с #<digit>
- Вы получаете отслеживание стека.
Используйте правильный инструмент для работы;)
Как автоматически напечатать следующие N выполненных строк в GDB?
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.