2016-08-01 55 views
5

Patrzę na ślad w gdb i wygląda na naprawdę zagracony ze względu na wszystkie wywołania wykonane w standardowej bibliotece i zwiększenie. Na przykład. Widzę boost::bind i std::allocator na stosie wywołań i kilka innych podobnych wywołań w standardowej bibliotece lub Boost.backtrace - ukryj standardową bibliotekę i wywołaj wywołania

Myślę, że byłoby mi pomocne, aby śledzenie pokazało mi tylko funkcje wyraźnie zdefiniowane w moim programie. Co więcej, pomogłoby to dalej, gdybym mógł szybko skonfigurować komendę backtrace, aby pokazywać lub ukrywać wywołania std i boost, kiedy i kiedy ich potrzebuję.

Każdy pomysł, jak ukryć boost na stosie połączeń lub skonfigurować śledzenie, aby włączyć lub wyłączyć rejestrowanie doładowania?

Odpowiedz

3

Nie ma wbudowanego sposobu, aby to zrobić.

Można to jednak zrobić, pisząc "ramowy filtr" Pythona, który zrzuca klatki, których nie chcesz oglądać. Nie jest to szczególnie trudne, ale wymaga napisania fragmentu kodu Python za pomocą API GDB Python.

+0

Brzmi interesująco, czy mógłbyś wskazać przykład? – sergej

+2

Oto filtr ramowy, który koloruje wydruki. Ważnym jest https://github.com/tromey/gdb-helpers/blob/master/gdbhelpers/colorize.py#L116 - jest to klasa implementująca filtr ramowy. Twoje może po prostu rzucić klatek, na których ci nie zależy. –