2012-05-04 10 views
14

znam odpowiedź na to, Kładę go tutaj dla innych, aby zobaczyć toWielowątkowe debugowanie Eclipse CDT nie jest optymalne - jak można uruchamiać wyłącznie wątki?

Jeśli używasz Eclipse CDT, prawdopodobnie zrozumieć, że zaćmienie nie jest debugger, to po prostu aplikacja przód- koniec, w szczególności do GDB. Tak więc podczas debugowania programów w C++, faktycznie używasz GDB w bardziej komfortowy sposób. Jeśli kiedykolwiek będziesz musiał debugować program wielowątkowy w Eclipse CDT, uświadomisz sobie, że rzeczy szybko stają się gorączkowe, ponieważ kiedy trafisz w punkt przerwania, wszystkie wątki zatrzymują się, a gdy spróbujesz wykonać pojedynczą linię w określonym wątku, to działa również pozostałe wątki. Aby działał poprawnie, wątki muszą być uruchamiane arbitralnie i wyłącznie - tak, że gdy programista wykonuje pojedynczą linię, wykonuje tylko określony wątek.

Domyślnie, ustawienia gdb domyślnie wyłączają "blokadę harmonogramu". Jeśli debugujesz aplikacje wielowątkowe, zrozumiesz, że musi to być w GDB, aby uzyskać pożądane zachowanie. Jak uruchomić tę komendę:

set scheduler-locking on 

w GDB w obrębie Zaćmienia CDT?

Odpowiedz

3

Może jeśli dodać następujący skrypt gdb, które mogą ustawić zmienną gdy program zatrzymuje się i wyłącza go, jeśli nadal:

define hook-step 
set scheduler-locking on 
end 
define hookpost-step 
set scheduler-locking off 
end 
define hook-run 
set scheduler-locking off 
end 
define hook-continue 
set scheduler-locking off 
end 
+2

Jak dokładnie wykonujesz skrypt GDB z poziomu Eclipse? – rbaleksandar

3

Przynajmniej jednym ze sposobów na rozwiązanie tego problemu jest umiejętność poruszania się po ogromnym zestawie funkcji oferowanych przez zaćmienie. Zazwyczaj, gdy program się uruchamia, Eclipse CDT przełącza okno konsoli (jeśli masz je otwarte, zazwyczaj jest na dole), aby pokazać wejście/wyjście programu.

Ale możesz to zmienić, jeśli nie wiesz - zobacz tę image. Ten przycisk od drugiego do ostatniego - niebieski, który wygląda jak monitor - możesz wybrać konsolę wejściową GDB. Zostało to omówione także w this thread.

Stamtąd wystarczy wpisać polecenie.

rozwiązany, ale potrzebują lepszego rozwiązania

Ale teraz zostało to rozwiązane, aby go rozwiązać w lepszy sposób, jak sprawa convience; pisanie o ustawionym blokowaniu harmonogramu przy każdym uruchomieniu programu jest głupie. Ale problem z ładowaniem pliku gdbinit polega na tym, że plik gdbinit jest pobierany, zanim eclipse ustawi program do rozwiązania gdb. Jest to problem, ponieważ powoduje, że widok debuggera zawiesza się w czasie zaćmienia, jak twierdzi GDB. Aby zrozumieć, co się dzieje, spróbuj uruchomić gdb, a następnie wydaj polecenie bez ładowania binarnego do wykonania. To się nie udaje - jak więc ustawić to jako opcję, która jest lepka?

+0

Cześć Adam, jeszcze żadnej odpowiedzi? – ransh

+0

Cóż, domyślam się, czego szukam dla deweloperów Eclipse CDT, aby zwrócić uwagę na to, co mam do powiedzenia; Nie jestem programistą z zaćmienia. Jakiś rodzaj przycisku byłby miły –

+0

Dzięki, czy zauważyłeś także zachowanie, które po usunięciu wszystkich punktów przerwania nadal zatrzymuje się w tym samym miejscu? – ransh