7

gdbの現在の関数の特定の変数の変数宣言の行番号を特定するにはどうすればよいですか?

サンプルコードは次のとおりです。

1       #include<stdio.h>
2
3       void func(int*);
4
5       void main()
6       {
7       int x;
8       char c[5];
9       int* p;
10      char *g;
11      char *ptr;
12
13      p = &x;
14      g = &c[3];
15      func(&x);
16      ptr = &c[1];
17      c[1]='f';
18      x=12;
19
20      }
21
22      void func(int *l){
23      int x;
24      unsigned int ggg;
25      ggg =100;
26
27      x = 3;
28      *l = x;
29      }
30

Wanted output:
for main()
  variable x, line 7
  variable c, line 8
  variable p, line 9
  variable g, line 10
  variable ptr, line 11

for func()
  variable x, line 23
  variable ggg, line 24

私が現在main()関数にいると仮定します。""を使用してローカル変数を取得し、info localsその変数名を解析できます。

(gdb) info locals
x = 4200592
c = "\000ε\030@"
p = 0x7ffd4000
g = 0x40 <Address 0x40 out of bounds>
ptr = 0x13cf304 <Address 0x13cf304 out of bounds>

また、listコマンドを使用して、変数の現在のスコープを取得できましたが、関数本体全体を取得することはできませんでした。以下はlistコマンドの結果であり、宣言変数' x'が欠落しているようです。また、リストサイズを20に設定してみて、8から27までの行を取得しましたが、それでも役に立ちませんでした。

(gdb) l
8       char c[5];
9       int* p;
10      char *g;
11      char *ptr;
12
13      p = &x;
14      g = &c[3];
15      func(&x);
16      ptr = &c[1];
17      c[1]='f';

ソースコードのすべてのコード行をチェックすると、異なる関数からの同じ変数宣言に遭遇する可能性があります...ヘルプ

4

1 に答える 1

7

これは簡単。listコマンドを使用して、対応する行を見つけることができます。

(gdb) set listsize 1
(gdb) list x
7            int x;
(gdb)

これは、xが7行目にあることを示しています。

または、コマンドリストにショートカットコマンドlを使用します

(gdb) l x
7            int x;
于 2012-05-17T19:42:10.383 に答える