Как постараться не вводить исходные файлы библиотеки при отладке в спокойном Создателе с gdb?

Устаревшие функции в PHP 5.5.x

Исходное расширение MySQL теперь устарело и будет генерировать ошибки E_DEPRECATED при подключении к базе данных. Вместо этого используйте расширения ** MYSQLi или PDO_MySQL . **

Синтаксис:

Кроме того, замените все mysql_* выполняет функцию mysqli_*

вместо

 

24
задан Piotr Dobrogost 19 September 2009 в 12:03
поделиться

4 ответа

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

(gdb) set auto-solib-add off

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

15
ответ дан 29 November 2019 в 00:22
поделиться

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

0
ответ дан codesniffer 29 November 2019 в 00:22
поделиться

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

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

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

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

Вы также можете просмотреть консоль gdb, выбрав «Отладка -> Представления -> Gdb»

1
ответ дан 29 November 2019 в 00:22
поделиться

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

Аналогичное, но более простая в использовании функция 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
3
ответ дан 29 November 2019 в 00:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: