Значение, измененное при анализе параметров

#c #gdb

#c #gdb

Вопрос:

Я получаю здесь странную проблему и прошу о помощи.

 (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. Как вы определили set_file_bit функцию?

2. Я определил функцию set_file_bit в другом исходном файле c

Ответ №1:

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

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