GDB — strcmp не работает: __strcmp_sse2_unaligned

Я не могу создать условную точку останова в 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);
}

И теперь я могу использовать эту функцию вместо моей условной точки останова.
Но это не совсем отладка, не так ли? Когда вам нужно изменить исходный код для его отладки, вы проиграли!

Так чего мне не хватает?

1

Решение

strcmp является специальный — это селектор функции времени выполнения (IFUNC), который возвращает адрес (одной из нескольких возможных) реализаций strcmp использоваться на текущем процессоре.

Вы должны быть в состоянии сделать это вместо этого:

break x if __strcmp_sse2_unaligned(str.c_str(), "foo") == 0
2

Другие решения

Других решений пока нет …