2016-04-08 4 views
-1

Я пытаюсь отлаживать xv6, используя эмулятор qemu, с ядром gdb.GDB не распознает новые файлы/строки

Как бы то ни было, gdb не узнает никаких дополнений, которые я делаю с файлами. например, он не узнает новые файлы, или даже новые строки в существующий файл, например:

в x86.hi файлов добавили anouther функцию, это код (я добавил КАС):

static inline void 
lcr3(uint val) 
{ 
    asm volatile("movl %0,%%cr3" : : "r" (val)); 
} 

static inline uint 
cas(volatile int *addr,int expected, int newval) 
{ 
    uint flags; 
    uint zf; 
    asm volatile("movl %0,%%eax;lock;cmpxchg %2,%3;jne afterChange;movl %%eax,%0;afterChange:;pushfl; popl %1":"+m"(*addr),"=r"(flags):"r"(expected),"r"(newval):"%eax"); 
    zf = (flags >> 6) & 1; 
    return zf; 
} 

GDB распознает LCR3, но не узнает КАС, однако, когда я на самом деле найти файл, я могу найти строки:

(gdb) list lcr3 
138 return val; 
139 } 
140 
141 static inline void 
142 lcr3(uint val) 
143 { 
144 asm volatile("movl %0,%%cr3" : : "r" (val)); 
145 } 
146 
147 static inline uint 
(gdb) list 
148 cas(volatile int *addr,int expected, int newval) 
149 { 
150 uint flags; 
151 uint zf; 
152 asm volatile("movl %0,%%eax;lock;cmpxchg %2,%3;jne afterChange;movl %%eax,%0;afterChange:;pushfl; popl %1":"+m"(*addr),"=r"(flags):"r"(expected),"r"(newval):"%eax"); 
153 //zf = (flags >> 6) & 1; 
154 zf = flags; 
155 return zf; 
156 } 
157 

я использую этот Makefile (основной xv6 Makefile): https://github.com/mit-pdos/xv6-public/blob/master/Makefile

Буду рад за любую помощь. Спасибо.

+1

Предположительно, он по-прежнему фиксируется на старых. –

+0

как я это исправить? я пробовал искать измененные файлы gdb или даже переустанавливать gdb –

+1

'make clean'. Перекомпилируйте. –

ответ

1

gdb не распознает любые дополнения, которые я делаю в файлах.
Я создал новую копию, обновил измененные файлы и скомпилировал (свежую). не работает

Это очень вероятно, означает, что вы отладочные старую копию файла вы думаете вы отладка.

ли это:

  1. ls -il xv6 наблюдать его (недавние) временную метку. Это должно быть последнее, потому что вы сделали make clean и перестроили его.
  2. сейчас rm -f xv6; ls -l xv6, чтобы проверить, не пропал ли файл.
  3. теперь попробуйте снова отладить его и обратите внимание, что вы все еще можете (что доказывает мое предположение).
  4. выяснить, какая копия вы фактически отладка и обновление это.
  5. Прибыль.

Update:

Я обновляю нужные файлы, как я уже упоминал в исходном посте, когда я на самом деле выглядеть в содержание файлов с помощью GDB я могу увидеть изменения.

Вы, по-видимому, говорите об исходных файлах. GDB не заботится об исходных файлах и не использует их (кроме случаев, когда вы спрашиваете GDB list). GDB заботится только об , составленном, и , что - это файл, который вы как-то пренебрегаете обновлением.

+0

Я обновляю правильные файлы, как я упоминал в первоначальном сообщении, когда я действительно просматриваю содержимое файлов с помощью gdb, я вижу изменения. он просто не узнает никаких новых символов или новых файлов. Я обновил свой репозиторий с изменениями, удалил любой след xv6 из системы, клонировал его, все файлы с добавлением, во всех ветвях. и все же, он не признает новые функции. –

+1

@OrDinari Я обновил ответ. –

+0

спасибо, но я не пренебрегал обновлением каких-либо двоичных файлов, я удалил двоичный файл и скомпилировал его снова более одного раза. Тем не менее, проблема решена сама по себе, без причины apparant, и без меня что-то другое, 1 «make clean qemu-gdb» не работает должным образом, а один сразу после этого. –