Как настроить Qt Creator и/или gdb, чтобы во время отладки моей программы с использованием Qt-библиотек отладчик избегал вхождения в исходные файлы Qt?
Как избежать ввода исходных файлов библиотеки при отладке в Qt Creator с помощью gdb?
Ответ 1
Вам нужно отключить авто-solib-add. Из обычного приглашения gdb вы должны ввести:
(gdb) set auto-solib-add off
В Qt Creator в разделе "Параметры- > Отладчик- > Gdb вы можете указать запуск Gdb script. Создайте файл с помощью команды" set auto-solib-add off", а затем установите для этого файла ваш загрузочный файл Gdb script.
Ответ 2
Функция, которую вы хотите (как описано в rpg), недоступна в GDB
, и IMHO будет трудно использовать, если она будет реализована.
Для GDB
предлагается аналогичная, но более простая в использовании функция fstep
. Дано:
foo((string("Hello") + string(" World!)).c_str());
fstep
будет пропускать все вызовы в текущей строке, кроме последней (таким образом пропуская строковые конструкторы, operator+()
и c_str()
и перейдя только в foo
).
Это также не реализовано, но, вероятно, будет через пару месяцев (это очень полезно для отладки C++
).
В то же время вы можете аппроксимировать эту функцию, установив временную точку останова:
(gdb) list
1 #include <string>
2 #include <iostream>
3 using namespace std;
4
5 void foo(const char *s)
6 {
7 cout << s << endl;
8 }
9
10 int main()
11 {
12 foo((string("Hello") + string(" World!")).c_str());
13 return 0;
14 }
(gdb) b main
Breakpoint 2 at 0x8048901: file t.cc, line 12.
(gdb) run
Breakpoint 1, main () at t.cc:12
12 foo((string("Hello") + string(" World!")).c_str());
(gdb) tb foo
Breakpoint 3 at 0x80488ca: file t.cc, line 7.
(gdb) c
foo (s=0x804a1f4 "Hello World!") at t.cc:7
7 cout << s << endl;
(gdb) q
Ответ 3
Обновление после комментариев:
В gdb вы можете указать, какой поиск исходных каталогов - если он не может их найти, он не сможет пойти в них.
Чтобы gdb вводил исходные файлы библиотек qt, он должен знать, где они находятся, - вероятно, что qt-creator сообщает gdb, где они находятся, когда он запускает отладчик. Посмотрите вокруг qt-creator для запуска gdb script - они могут быть указаны там.
Если они не указаны в startup script, и он gdb находит исходные файлы самостоятельно, вы должны иметь возможность изменить запуск gdb script, чтобы очистить все каталоги командой directory
(см. ссылка выше для синтаксиса и т.д.)
Вы также можете просмотреть консоль gdb, перейдя в "Debug → Views → Gdb", чтобы получить информацию о том, какие исходные каталоги она использует в настоящее время с помощью команды show directories
в gdb, и очистка любого из них вручную если вы хотите сделать это в каждом конкретном случае.