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 не распознает любые дополнения, которые я делаю к файлам.
Я создал новую копию, обновил измененные файлы и скомпилировал (свежий). не работал

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

Сделай это:

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

Обновить:

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

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

Другие вопросы по тегам