2016-04-08 8 views
-1

qemuエミュレータを使用してgdbカーネルでxv6をデバッグしようとしています。GDBは新しいファイル/行を認識しません

これまでどおり、gdbはファイルに対してどのような追加も認識しません。例えば、それは文句を言わない、たとえば、新しいファイル、または既存のファイルでも、新しい行を認識:

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; 
} 

ファイルx86.hiにanouther機能を追加した、これはコード(私は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 

(基本xv6のmakefile): https://github.com/mit-pdos/xv6-public/blob/master/Makefile

gdbが、私は実際にファイルを検索するときしかし、私はラインを見つけることができ、lcr3を認識するが、文句を言わないCASを認識します

ご協力いただき誠にありがとうございます。ありがとうございました。

+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. 利益。

更新:

私は最初の記事で述べたように、私は実際に私が修正を見ることができ、GDBを使用してファイルの内容に見たとき、私は、右のファイルを更新しています。

あなたは(明らかに)ソースファイルについて話しています。 GDB はソースファイルについてはを気にせず、を使用しません(GDBにlistと尋ねる場合を除く)。 GDBは、のバイナリファイルを気にしています。は何とか更新したくないファイルです。

+0

最初の投稿で述べたように、実際にgdbを使ってファイル内容を調べると正しいファイルが更新されています。それはちょうど新しいシンボルや新しいファイルを認識しません。私はリポジトリを変更して更新し、システムからxv6のトレースを削除し、クローンに戻し、すべてのブランチに追加したすべてのファイルをクローンしました。それでも、新しい機能を認識することはできません。 –

+1

@OrDinari私は答えを更新しました。 –

+0

ありがとうございますが、私はバイナリを更新するのを怠っていませんでした。私はバイナリを削除し、もう一度コンパイルしました。しかし、問題はそれ自体を解決した理由がなく、私が別のことをしなければ、1「クリーンなqemu-gdbを作ろう」が正しく機能しなかったのです。 –

関連する問題