GDB не распознает новые файлы / строки
Я пытаюсь отладить xv6, используя эмулятор qemu, с ядром gdb.
Как бы то ни было, GDB не будет распознавать любые добавления, которые я делаю к файлам. например, он не распознает новые файлы или даже новые строки в существующем файле, например:
в файле x86.h i добавили еще одну функцию, это код (я добавил cas):
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, но не распознает cas, однако, когда я на самом деле ищу файл, я могу найти строки:
(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
я использую этот make-файл (основной make-файл xv6): https://github.com/mit-pdos/xv6-public/blob/master/Makefile
Буду рад любой помощи. благодарю вас.
1 ответ
GDB не распознает любые дополнения, которые я делаю к файлам.
Я создал новую копию, обновил измененные файлы и скомпилировал (свежий). не работал
Это очень вероятно означает, что вы отлаживаете старую копию файла, который, как вы думаете, вы отлаживаете.
Сделай это:
ls -il xv6
соблюдать его (недавнюю) метку времени. Это должно быть недавно, потому что вы сделалиmake clean
и восстановил это.- сейчас
rm -f xv6; ls -l xv6
чтобы убедиться, что файл исчез. - Теперь попробуйте отладить его снова и заметьте, что вы все еще можете (что доказывает мое предположение).
- выясните, какую копию вы на самом деле отлаживаете, и обновите ее.
- Прибыль.
Обновить:
Я обновляю нужные файлы, как я уже упоминал в первоначальном посте, когда я на самом деле смотрю на содержимое файлов с помощью gdb, я вижу изменения.
Вы (очевидно) говорите об исходных файлах. GDB не заботится об исходных файлах и не использует их (кроме случаев, когда вы просите GDB list
их). GDB заботится только о скомпилированном двоичном файле, и это тот файл, который вы почему-то не хотите обновлять.