strcmp в gdb дает странные результаты

В 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

person John St. John    schedule 07.03.2012    source источник
comment
Связанный? stackoverflow.com/questions/1354731/   -  person Carl Norum    schedule 08.03.2012
comment
Также укажите, какую версию GDB вы используете.   -  person FatalError    schedule 08.03.2012
comment
Похоже, вам не хватает «\ 0» в конце каждой строки, поэтому gdb предоставляет мусор.   -  person darren102    schedule 08.03.2012
comment
Да, Карл, спасибо, это связано с этой проблемой. Компилятор оптимизировал strcmp, поэтому, когда я добавил функцию вызова strcmp в свой код и вызвал эту функцию из gdb, она заработала!   -  person John St. John    schedule 08.03.2012