解析参数时值已更改

时间:2011-10-27 07:06:19

标签: 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 个答案:

答案 0 :(得分:0)

最可能的原因是set_file_bit是使用优化编译的,当GDB进入时,参数尚未完全设置。

尝试在binary内打印set_file_bit,它可能是0xbfffef5c。在调试优化代码时,经常会看到这样的工件。使用-O0重建以使您的调试更容易。