Я не могу создать условную точку останова в GDB с помощью strcmp:
break x if strcmp(str.c_str(), "foo") == 0
Почему ты спрашиваешь?
Так как:
print strcmp("hello", "hello")
Выход-х
(int (*)(const char *, const char *)) 0x7ffff76ffe70 <__strcmp_sse2_unaligned>
Даже при преобразовании его в целое число:
print (int)strcmp("hello", "hello")
Возвращает какое-то бессмысленное значение, например -143655312
Вот менее изящный способ «решить» мою проблему.
Я могу определить функцию в своем собственном коде:
int mystrcmp(const char *str1, const char* str2){
return strcmp(str1, str2);
}
И теперь я могу использовать эту функцию вместо моей условной точки останова.
Но это не совсем отладка, не так ли? Когда вам нужно изменить исходный код для его отладки, вы проиграли!
Так чего мне не хватает?
strcmp
является специальный — это селектор функции времени выполнения (IFUNC), который возвращает адрес (одной из нескольких возможных) реализаций strcmp
использоваться на текущем процессоре.
Вы должны быть в состоянии сделать это вместо этого:
break x if __strcmp_sse2_unaligned(str.c_str(), "foo") == 0
Других решений пока нет …