Значение изменилось при разборе параметров - PullRequest
1 голос
/ 27 октября 2011

У меня тут странная проблема, и я прошу помощи.

(gdb) 
    28      set_file_bit( file, bytePos, bitPos, argv[1] );
    (gdb) p argv[1]
    $3 = 0xbfffef5c "00"
    (gdb) s
    set_file_bit (file=0x804b008, bytePos=2, bitPos=2, binary=0x80490e5 "11") at util/file.c:112
    112     long int pos = ftell(file);

Мы можем видеть значение бинарного файла 0x80490e5, а не 0xbfffef5c, почему? argv - это параметр функции main. некоторая часть функции main -

int main( int argc, char** argv ){
    FILE* file = 0;
    file = fopen( "t.txt", "r+" );
    unsigned int bytePos = 2;
    unsigned int bitPos = 2;
    char buff[2] = { 0, 0 };
    get_byte( file, bytePos, 1, buff);
    set_file_bit( file, bytePos, bitPos, argv[1] );

Спасибо

1 Ответ

0 голосов
/ 27 октября 2011

Наиболее вероятная причина в том, что set_file_bit был скомпилирован с оптимизацией, и параметры не были полностью настроены при входе в него GDB.

Попробуйте напечатать binary внутри set_file_bit, это будетскорее всего, будет 0xbfffef5c.При отладке оптимизированного кода часто встречаются такие артефакты.Перестройте с -O0, чтобы облегчить отладку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...