🦃
gawkのデバッグ機能について
はじめに
Recommended Tools for Compilation
... 省略
GNU 'awk' 3.1.2, or higher
'awk' is used in several places to generate files. Some 'gawk'
extensions are used, including the 'asorti' function, which was
introduced in version 3.1.2 of 'gawk'. As of release time, 'gawk'
version 5.1 is the newest verified to work to build the GNU C
Library.
asorti
って何?と思ったので調べてみました。
ドキュメント
gawkのドキュメントは以下。
あと以下。
サンプル
以下のようなサンプルを書いてみました。
sample.awk
BEGIN {
a["last"] = "de"
a["first"] = "sac"
a["middle"] = "cul"
asort(a, b)
asorti(a, c)
for(i=1; i<=length(b); i++) print b[i];
print "---"
for(i=1; i<=length(c); i++) print c[i];
}
実行結果は以下
$ gawk -f sample.awk
cul
de
sac
---
first
last
middle
gawkのデバッガ機能で見てみる
$ gawk -D -f sample.awk
gawk>
あとは、普通のデバッガのように
ブレークを貼ったり変数の値を表示させたりできます。
p @<変数名>
で変数の情報が表示できます。
以下では、asort
, asorti
の結果の配列を表示させています。
gawk> break sample.awk:9
Breakpoint 1 set at file `sample.awk', line 9
gawk> run
Starting program:
Stopping in BEGIN ...
Breakpoint 1, main() at `sample.awk':9
9 for(i=1; i<=length(b); i++) print b[i];
gawk>
gawk> p @a
a["first"] = "sac"
a["last"] = "de"
a["middle"] = "cul"
gawk> p @b
b["1"] = "cul"
b["2"] = "de"
b["3"] = "sac"
gawk> p @c
c["1"] = "first"
c["2"] = "last"
c["3"] = "middle"
表でまとめてみました。
変更前 | asort(a, b) | asorti(a, c) |
---|---|---|
a["first"] = "sac" | b["1"] = "cul" | c["1"] = "first" |
a["last"] = "de" | b["2"] = "de" | c["2"] = "last" |
a["middle"] = "cul" | b["3"] = "sac" | c["3"] = "middle" |
まとめ
もともとglibcに興味があって、
glibcのコードを見ていたのですが、
gawkについての記載が気になったので、このような記事を書いてみました。
Discussion