Jak mogę skonfigurować program Qt Creator i/lub gdb, aby podczas debugowania mojego programu przy użyciu bibliotek Qt debugger unikał wchodzenia do plików źródłowych Qt?Jak uniknąć wprowadzania plików źródłowych biblioteki podczas debugowania w Qt Creator przy użyciu gdb?
Odpowiedz
trzeba wyłączyć auto-solib-add. Od normalnego wierszu gdb wpisz:
(gdb) set auto-solib-add off
w Qt Creator, pod Opcje-> Debugger-> GDB można określić skryptu uruchamiania GDB. Utwórz plik za pomocą polecenia "set auto-solib-add off", a następnie ustaw skrypt uruchamiania Gdb na ten plik.
nie będzie działać z kompilacją statyczną oczywiście (ma nazwę auto-SOlib-add). –
Aktualizacja po komentarzu wyjaśnienia:
W gdb można określić, które source directories are searched - jeśli nie mogą ich znaleźć, to nie będzie mógł pójść do nich.
Aby gdb mógł wprowadzać pliki źródłowe bibliotek qt musi wiedzieć, gdzie są - prawdopodobnie qt-creator mówi gdb, gdzie są, gdy uruchamia debugger. Rozejrzyj się wokół qt-creator dla skryptu startowego gdb - mogą tam być określone.
Jeśli nie są określone w skrypcie startowym i to gdb znajduje pliki źródłowe na swoim, powinieneś być w stanie zmodyfikować skrypt startowy gdb, aby wyczyścić dowolne katalogi komendą directory
(zobacz powyższy link dla składni itp. .)
Możesz również być w stanie wyświetlić konsolę gdb, przechodząc do "Debuguj -> Widoki -> Gdb", aby uzyskać informacje o katalogach źródłowych, których aktualnie używasz z poleceniem show directories
w gdb, i usuwając wszelkie off ręcznie, jeśli chcesz to zrobić indywidualnie dla każdego przypadku.
Oto, co moim zdaniem Piotr chce: masz połączenie typu foo (QVariant :: fromValue (MySuperClass (QString ("hi% 1"). Arg ("Andy")))). Po wkroczeniu do debuggera należy pominąć arg, konstruktor QString, wywołanie fromValue i wprowadzić tylko MySuperClass i foo. AFAIK, Qt Creator nie może tego zrobić. Było trochę dyskusji o przeskakiwaniu maszyny sig/slot podczas przechodzenia przez kod, ale nie wiem, czy ją zaimplementowali. – rpg
Andy, to co opisujesz nazywa się STEP OUT i STEP OVER i zawsze było możliwe w prawie każdym debugerze. Nie chcę ** ręcznie ** wychodzić/nad kodem źródłowym Qt. Chcę, aby debugger przejrzał go ** automatycznie **.rpg ma rację w swoim komentarzu i opisuje funkcję, o którą pytałem. –
Funkcja, którą chcesz (zgodnie z opisem w rpg) nie jest dostępna od GDB
, a IMHO byłoby trudne w użyciu, gdyby zostało zaimplementowane.
Podobna, ale łatwiejsza w użyciu funkcja fstep
jest proponowana dla GDB
. Biorąc pod uwagę:
foo((string("Hello") + string(" World!)).c_str());
na fstep
byłoby pominąć wszystkie połączenia na bieżącej linii, z wyjątkiem ostatniego (w ten sposób omijając konstruktorów smyczkowe, operator+()
i c_str()
i intensywniejszej tylko do foo
).
Nie zostało to również zaimplementowane, ale prawdopodobnie nastąpi za kilka miesięcy (jest to bardzo przydatne przy debugowaniu C++
).
W tym czasie, można zbliżyć się do funkcji poprzez ustawienie tymczasowego przerwania:
(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
Co sądzisz o propozycji Andy'ego do usunięcia/ukrycia plików źródłowych biblioteki? –
Możesz go wypróbować, ale nie sądzę, żeby ci to pomogło: GDB nadal będzie wchodził w funkcje, których nie chcesz, po prostu nie pokaże ich źródła. Prawdopodobnie jest to gorsze od tego, od czego zacząłeś. Ponadto, jeśli korzystasz z platformy ELF (na przykład Linux), musisz usunąć nagłówki bibliotek - kompilator umieści w nich pełną ścieżkę do pliku wykonywalnego (IOW, modyfikując skrypt startowy GDB prawdopodobnie okaże się bezowocny). –
@Employed: It's 2012 i fstep nadal nie jest częścią GDB. Czy jest jakaś inna alternatywa? (Lub łatka, którą mógłbym zastosować do źródeł gdb) Jest to konieczne dla rozwoju C++. – nimrodm
- 1. Skonfiguruj program Qt Creator do pracy z GDB
- 2. Instalowanie programu Qt Creator przy użyciu MinGW
- 3. Uruchamianie trybu debugowania w Qt Creator
- 4. Tworzenie Qt Creator przy użyciu MinGW
- 5. Jak uniemożliwić GDB załadowanie symbolu debugowania dla (dużej) biblioteki?
- 6. Tworzenie biblioteki Androida przy użyciu QT
- 7. Jak znaleźć błąd segmentacji z wielu plików przy użyciu GDB
- 8. Czy istnieje sposób na otwarcie dwóch plików źródłowych jednocześnie w Qt Creator 2.3?
- 9. Jak skonfigurować CDB w Qt Creator?
- 10. Qt Creator Code File Refaktoryzacja
- 11. Całkowicie wyczyść valgrind podczas debugowania z gdb
- 12. Przesyłanie plików przy użyciu Qt QNetworkRequest
- 13. gdb nie znajduje plików źródłowych skompilowanych przez clang ++
- 14. Testowanie jednostkowe (nie Qt) kodu C++ w Qt Creator?
- 15. Jak uniknąć buforowania w bibliotece wprowadzania plików Python
- 16. jak generować pliki pdb podczas budowania biblioteki przy użyciu mingw?
- 17. Wejście konsoli z Qt Creator
- 18. Wyświetl zawartość tablicy w Qt Creator debugger
- 19. Brakuje biblioteki DLL podczas uruchamiania aplikacji Qt GUI
- 20. ponownie połączyć siły przy budowie w QT Creator
- 21. Linux: Qt Creator debugger zawiesza się podczas QQmlApplicationEngine jest tworzony
- 22. Korzystanie z Qt Creator CUpewnij
- 23. Jak tłumić ostrzeżenia w Qt Creator
- 24. Jak udostępnić krok kompilacji w Qt Creator
- 25. Wbudowane debugowanie Qt 5.x - wdrażanie usuniętych plików binarnych?
- 26. Qt Creator: QtGui to błąd
- 27. Konfigurowanie Qt Creator do pracy z CDB
- 28. Używanie „Analyse pamięci” narzędzie w Qt Creator
- 29. Przeniesienie katalogu przy użyciu Qt
- 30. Jak korzystać z wersji debugowania biblioteki libc
ten sam problem dla cdb, jak sobie z tym poradzić? – raidsan