2009-10-17 11 views
7

Rozglądałem się, ale nie byłem w stanie dowiedzieć się, jak można wydrukować w gdb wynik oceny. czyli na przykład w poniższym kodzie:gdb - jak wydrukować wynik oceny dla C++

if (strcmp(current_node->word,min_node->word) > 0) 
     min_node = current_node; 

(powyżej starałem się możliwą metodę sprawdzania kolejności alfabetycznej ciągów i nie było absolutnie pewne, że działa poprawnie)

teraz mogłem oglądać min_node i zobaczyć jeśli wartość zmienia się, ale w bardziej zaangażowanym kodzie, czasami jest to bardziej skomplikowane. Zastanawiam się, czy istnieje prosty sposób na sprawdzenie oceny testu na linii, na której obecnie znajduje się gdb/program.

wielkie dzięki!

Odpowiedz

16

Brak pojedynczego kroku w gdb na poziomie ekspresji, jeśli o to prosisz.

Twoje opcje są (od najczęściej do najbardziej rzadko używany):

  1. ocena ekspresji w gdb, robi print strcmp(current_node->word,min_node->word). Co zaskakujące, działa to: gdb może oceniać wywołania funkcji, wprowadzając kod do działającego programu i wykonując go. Oczywiście jest to dość niebezpieczne, jeśli funkcje mają skutki uboczne lub mogą się zawiesić; w tym przypadku jest to tak nieszkodliwe, że ludzie zazwyczaj nie myślą o potencjalnych problemach.
  2. Wykonaj na poziomie instrukcji (złożenia) jednostopniowe (ni/si). Po zakończeniu instrukcji połączenia wynik zostanie znaleziony w rejestrze, zgodnie z konwencjami procesora (% eax na x86).
  3. edytować kod, aby przypisać wartości pośrednie do zmiennych, i podzielić go na oddzielne linie/wyciągi; następnie użyj zwykłego pojedynczego kroku i sprawdź zmienne.
+0

Świetnie, dziękuję - to pomaga! – nero

4

może po prostu spróbuj wpisać:

nazywają "my_funtion()"

ile mi rember, choć to nie będzie działać, gdy funkcja jest inlined.