Strcmp в GDB дает странные результаты - PullRequest
3 голосов
/ 08 марта 2012

В 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
...