Yanıtlar:
Şunları kullanabilirsiniz strcmp:
break x:20 if strcmp(y, "hello") == 0
20satır numarasıdır, xherhangi bir dosya adı yolabilir ve herhangi bir değişken olabilir.
No symbol "strcmp" in current context.
runverebileceksiniz: dinamik kütüphanelerin yüklenmesi için buna ihtiyacınız var. Kaynak için google it ve şunu bulun: stackoverflow.com/questions/10000335/… :-)
$_streq@tlwhitec yöntemi daha iyidir.
break x if ((int)strcmp(y, "hello")) == 0
Bazı uygulamalarda gdb, strcmp'nin dönüş türünü bilmiyor olabilir. Bu, atmanız gerekeceği anlamına gelir, aksi takdirde her zaman doğru olarak değerlendirilir!
GDB 7.5'ten bu yana bu yerel Rahatlık İşlevlerini kullanabilirsiniz :
$_memeq(buf1, buf2, length)
$_regex(str, regex)
$_streq(str1, str2)
$_strlen(str)
strcmp()Kesme noktası her vurulduğunda işlem yığını üzerinde bir "yabancı" yürütmek zorunda kalmaktan daha az sorunlu görünüyor . Bu özellikle çok iş parçacıklı işlemlerde hata ayıklama için geçerlidir.
GDB'nizin mevcut linux dağıtımlarıyla ilgili bir sorun olmayan Python desteği ile derlenmesi gerektiğini unutmayın. Emin olmak için,
show configurationGDB'nin içinde çalışıp arayarak kontrol edebilirsiniz--with-python. Bu küçük oneliner de hile yapar:$ gdb -n -quiet -batch -ex 'show configuration' | grep 'with-python' --with-python=/usr (relocatable)
Demo durumunuz için kullanım
break <where> if $_streq(x, "hello")
veya kesme noktanız zaten mevcutsa ve sadece koşulu ona eklemek istiyorsanız
condition <breakpoint number> $_streq(x, "hello")
$_streqyalnızca tüm dizeyle eşleşir, bu nedenle daha kurnaz bir şey istiyorsanız $_regex, Python düzenli ifade sözdizimini destekleyen kullanmalısınız .
strncmpvestrstrdiğer yararlı C sorgu fonksiyonlarıdır.