Как избежать ввода исходных файлов библиотеки при отладке в Qt Creator с помощью gdb? - PullRequest
24 голосов
/ 19 сентября 2009

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

Ответы [ 4 ]

15 голосов
/ 28 сентября 2009

Вам нужно отключить авто-solib-add. В обычном приглашении GDB вы должны набрать:

(gdb) set auto-solib-add off

В Qt Creator в Options-> Debugger-> Gdb вы можете указать скрипт запуска Gdb. Создайте файл с командой «set auto-solib-add off», а затем установите для этого сценария запуска Gdb этот файл.

3 голосов
/ 25 сентября 2009

Требуемая вами функция (как описано в rpg) недоступна из GDB, и IMHO будет трудно использовать, если она будет реализована.

Аналогичная, но более простая в использовании функция fstep предлагается для GDB. Дано:

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
1 голос
/ 21 сентября 2009

Обновление после уточнения комментария:

В gdb вы можете указать, какие исходные каталоги будут искать - если он не может их найти, он не сможет войти в них.

Чтобы gdb мог вводить исходные файлы библиотек qt, он должен знать, где они находятся - вполне вероятно, что qt-creator сообщает gdb, где они находятся, когда запускает отладчик. Посмотрите в qt-creator сценарий запуска gdb - они могут быть указаны там.

Если они не указаны в сценарии запуска, и GDB самостоятельно находит исходные файлы, вы сможете изменить сценарий запуска GDB, чтобы очистить все каталоги с помощью команды directory (синтаксис см. Выше). и др.)

Вы также можете просмотреть консоль gdb, перейдя в «Отладка -> Представления -> Gdb», чтобы получить информацию о том, какие исходные каталоги он использует в настоящее время с помощью команды show directories в gdb, и отключив все вручную если вы хотите сделать это на индивидуальной основе.

0 голосов
/ 05 января 2019

Возможно, это не совсем идеальное решение этого вопроса, но, возможно, это поможет исключить каталоги, в которых ваш проект не (т. Е. Сторонние библиотеки, системные заголовки (например, STL) и т. Д.). Если это так, взгляните на https://stackoverflow.com/a/31629136/5155476 и https://stackoverflow.com/a/42721326/5155476. Первый вариант позволяет указать каталоги (и все подкаталоги), которые нужно пропустить при шаге во время работы GDB (так что вы можете изменить набор в любое время) , но это требует от вас, чтобы построить GDB. Последний допускает ту же функциональность, но предварительно настроенную перед запуском GDB, и не требует сборки GDB.

...