Подтвердить что ты не робот

Как избежать ввода исходных файлов библиотеки при отладке в Qt Creator с помощью gdb?

Как настроить Qt Creator и/или gdb, чтобы во время отладки моей программы с использованием Qt-библиотек отладчик избегал вхождения в исходные файлы Qt?

4b9b3361

Ответ 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, и очистка любого из них вручную если вы хотите сделать это в каждом конкретном случае.