В 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