Это хороший плагин JQuery в:
http://plugins.jquery.com/project/sort (ссылка Wayback Machine Link)
* Изменения в GDB 7.4
blockquote>
- Теперь GDB позволяет пропускать неинтересные функции и файлы при переходе с «функцией пропуска» и «пропустить файл» ".
Пошаговые инструкции и пропустить все файлы без источника
Это будет слишком медленным для большинства приложений, но это весело!
На основании: Отображение каждой инструкции сборки в gdb
class ContinueUntilSource(gdb.Command):
def __init__(self):
super().__init__(
'cus',
gdb.COMMAND_BREAKPOINTS,
gdb.COMPLETE_NONE,
False
)
def invoke(self, argument, from_tty):
argv = gdb.string_to_argv(argument)
if argv:
gdb.write('Does not take any arguments.\n')
else:
done = False
thread = gdb.inferiors()[0].threads()[0]
while True:
message = gdb.execute('si', to_string=True)
if not thread.is_valid():
break
try:
path = gdb.selected_frame().find_sal().symtab.fullname()
except:
pass
else:
if os.path.exists(path):
break
ContinueUntilSource()
Проверено в Ubuntu 16.04, GDB 7.11. GitHub вверх по течению .
gdb.selected_frame().find_sal().symtab.fullname()
, если вы хотите сделать перерыв в любой строке данного файла.
– Ciro Santilli 新疆改造中心 六四事件 法轮功
8 March 2018 в 16:46
gdb 7.12 поддерживает флешинг файлов, чтобы указать файлы для пропусков в отладчике. Документация для нее такова:
https://sourceware.org/gdb/onlinedocs/gdb/Skipping-Over-Functions-and-Files.html
Чтобы пропустить шаг за шагом во все заголовки библиотек в каталоге / usr / include / c ++ / 5 / bits, добавьте следующие строки в ~ / .gdbinit
# To skip all .h files in /usr/include/c++/5/bits
skip -gfi /usr/include/c++/5/bits/*.h
Вместо этого пропустите конкретную файл, скажем, stl_vector.h, добавьте следующие строки в ~ / .gdbinit
# To skip the file /usr/include/c++/5/bits/stl_vector.h
skip file /usr/include/c++/5/bits/stl_vector.h
Выполнение вышеуказанного с помощью gdb версии 7.11 и ниже приводит к следующей ошибке:
Ignore function pending future shared library load? (y or [n]) [answered N; input not from terminal]
Однако gdb 7.12, похоже, решил проблему выше.
Этот блог обращается к той же проблеме для версии gdb версии 7.11 или ниже.
Примечание. может использовать приведенную ниже команду из командной строки gdb для отображения всех файлов, помеченных для пропусков
info skip
skip -gfile bits/*.h
.
– John H.
2 June 2017 в 15:32
skip -gfi /usr/include/c++/6/bits/*.h
run
s
std::vector<int, std::allocator<int> >::~vector (this=0x7fffffffaf10, __in_chrg=<optimized out>) at /usr/include/c++/6/bits/stl_vector.h:426
– Jeff Trull
21 June 2017 в 15:18
Изменено из команды answer команды Ciro Santilli ss
внутри определенного источника. Вы можете указать имя исходного файла, или будет выведено текущее. Очень удобен для перехода через источники bison / yacc или другие мета-источники, которые генерируют код С и вставляют директивы #line
.
import os.path
class StepSource(gdb.Command):
def __init__(self):
super().__init__(
'ss',
gdb.COMMAND_BREAKPOINTS,
gdb.COMPLETE_NONE,
False
)
def invoke(self, argument, from_tty):
argv = gdb.string_to_argv(argument)
if argv:
if len(argv) > 1:
gdb.write('Usage:\nns [source-name]]\n')
return
source = argv[0]
full_path = False if os.path.basename(source) == source else True
else:
source = gdb.selected_frame().find_sal().symtab.fullname()
full_path = True
thread = gdb.inferiors()[0].threads()[0]
while True:
message = gdb.execute('next', to_string=True)
if not thread.is_valid():
break
try:
cur_source = gdb.selected_frame().find_sal().symtab.fullname()
if not full_path:
cur_source = os.path.basename(cur_source)
except:
break
else:
if source == cur_source:
break
StepSource()
pass
на break
на исключение, так как не уверен, что он прав.
skip file
). Могу ли я не предварительно сконфигурировать gdb, чтобы пропустить все, например,/usr/include
? – dhardy 11 May 2015 в 11:55skip file
для всей стандартной библиотеки при запуске отладки программы на C ++. Очевидным требованием является то, что gdb должен быть скомпилирован с поддержкой python (или переписать этот код в Guile, если у вас это есть). – xaizek 26 May 2016 в 12:15