Czy mogę określić, że chcę, aby gdb przerywał w linii x, gdy char* x
wskazuje ciąg, którego wartość jest równa "hello"
? Jeśli tak, w jaki sposób?
c
debugging
gdb
conditional-breakpoint
341008
źródło
źródło
strncmp
istrstr
inne przydatne funkcje zapytań C.Odpowiedzi:
Możesz użyć
strcmp
:20
to numer wiersza,x
dowolna nazwa pliku iy
dowolna zmienna.źródło
No symbol "strcmp" in current context.
run
, aby biblioteki dynamiczne zostały załadowane. Aby uzyskać źródło,$_streq
metoda z @tlwhitec jest lepsza.W niektórych implementacjach gdb może nie znać zwracanego typu strcmp. Oznacza to, że musiałbyś rzucić, w przeciwnym razie zawsze zostanie ocenione jako prawda!
źródło
Od GDB 7.5 możesz używać tych natywnych funkcji wygodnych :
Wydaje się to znacznie mniej problematyczne niż konieczność wykonywania „obcego”
strcmp()
na stosie procesu za każdym razem, gdy trafiony jest punkt przerwania. Jest to szczególnie prawdziwe w przypadku debugowania procesów wielowątkowych.W przypadku wersji demonstracyjnej użycie byłoby
lub, jeśli punkt przerwania już istnieje i chcesz po prostu dodać do niego warunek
$_streq
dopasowuje tylko cały ciąg, więc jeśli chcesz czegoś bardziej przebiegłego, powinieneś użyć$_regex
, który obsługuje składnię wyrażeń regularnych Pythona .źródło