Mam debugowanie statycznej wielowątkowej aplikacji C++ w wersji 86-64 na Linux.Krok gdb nie działa zgodnie z oczekiwaniami
Potrafię ustawiać punkty przerwania funkcji i zatrzymywać się na nich. Mogę poruszać się krok po kroku nad ciałem funkcji. Ale kiedy próbuję przejść do innej funkcji, gdb nie zatrzymuje się na początku i wydaje się, że po prostu kontynuuje wykonywanie. Kiedy przerwać wykonywanie programu, gdb idzie uszkodzony stan i staje się bezużyteczny:
(gdb) bt
Target is executing.
(gdb) c
Continuing.
Cannot execute this command while the selected thread is running.
(gdb)
Jako obejście mogę wykorzystać stepi
kilkakrotnie zamiast step
, stepi
działa zgodnie z oczekiwaniami. Co może być przyczyną tego zachowania? Czy są jakieś obejścia oprócz używania stepi
? Używam gdb 7.6 i gcc 4.7.1.
Czy skompilowałeś cel za pomocą '-ggdb' i' -O0'? Czy próbowałeś obserwować różnicę między krokiem ('s') i następnym (' n')? – Reinderien
@Reinderien, mój cel jest skompilowany z '-g' i' -O0'. Jak mogę zaobserwować różnicę między 's' i' n'? – ks1322
Spróbuj zmienić z '-g' na' -ggdb'. Aby zobaczyć różnicę, krok po kroku wpisując 's' (skutecznie" wkroczyć ") w miejsce' n' (skutecznie "krok po kroku") w gdb. – Reinderien