2011-10-27 59 views
1

我在這裏遇到一個奇怪的問題,並尋求幫助。解析參數時值改變

(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); 

我們可以看到binary的值是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]); 

感謝

+0

你是怎麼定義'set_file_bit'函數的? –

+0

我在其他c源文件中定義了set_file_bit函數 – river

回答

0

最可能的原因是,set_file_bit與優化編譯,參數尚未完全建立時GDB走進它。

嘗試在set_file_bit內打印binary,它很可能是0xbfffef5c。在調試優化的代碼時,經常會看到這樣的工件。使用-O0重建以使您的調試更輕鬆。