В GDB (gnu v 7.1-ubuntu) я получаю очень странные результаты, когда пытаюсь использовать strcmp
, чтобы определить, равны ли две строки. p strcmp("hello","hello")
дает мне результат -145947168
.
Все, что я пытаюсь использовать с strcmp
или strncmp
, возвращает -145947168
в gdb. Что я делаю не так?
РЕДАКТИРОВАТЬ (спасибо Карлу за указатель на соответствующий ответ в комментариях): см. ответ на этот вопрос: Как оценивать функции в GDB?
По-видимому, иногда компилятор оптимизирует функции, вызываемые из внешних библиотек, и определение функции в коде, которая вызывает функцию внешней библиотеки, к которой вы хотите получить доступ в GDB, сделает ее доступной.
Я добавил это в свой код:
#ifdef DEBUG
int mystrcmp(char *a, char *b){
return strcmp(a,b);
}
int mystrncmp(char *a, char *b, int n){
return strncmp(a,b,n);
}
#endif
а затем переделал с помощью -DDEBUG -g
, чтобы включить компиляцию этих вспомогательных функций для моей отладки gdb.
(gdb) p mystrcmp("hello","hello")
$1 = 0
(gdb) p strcmp("hello","hello")
$2 = -145947168