gpt4 book ai didi

linux - 如何从行号中查找封装函数名

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:46 24 4
gpt4 key购买 nike

我正在查看一个日志文件,它只告诉我文件名和文件中有错误的行号。我感兴趣的是了解封装功能。例如这里是日志文件的内容

    Error: foo.file on line wxy
Error: foo.file on line xyz
.
.
.

这里是文件 foo.file 的内容

function abc_1234 (...)
.
.
.


endfunction

function def_442 ()
.
.
.
//Following line number is WXY
assign Z ==== X;

endfunction


function ghi(...)
.
.
.


//Following line number is XYZ
assign X = X;
endfunction

.
.
.

根据上面的日志文件,我想得到函数名 defghi 返回。我已经尝试了@larsks 提供的部分解决方案并添加了 [[::blank::]]

# look for function definitions and record the function name
# in the func_name variable
/function [[:alpha:]][[:alnum:]]*[[:blank:]]*([^)]*)/ {
func_name = substr($2, 1, index($2, "(")-1);
}

# when we reach the target line number, print out the current
# value of func_name
NR == target {
print func_name
}

它在 abc_1234 (...)def_442 (...) 上失败,因为 ( 之前有一个空格。我无法使上述工作

最佳答案

为了将行号映射到函数定义,您将需要遍历源文件以查找函数定义,然后在遇到目标行号时打印出当前定义。例如,像这样:

# look for function definitions and record the function name
# in the func_name variable. This looks for lines matching the pattern
# function <space> <identifier>(<anything>), and records the
# <identifier> part in func_name.
/function [[:alpha:]][[:alnum:]]* *([^)]*)/ {
func_name = $0
func_name = gensub("function *", "", 1, func_name)
func_name = gensub(" *\\(.*", "", 1, func_name)
}


# when we reach the target line number, print out the current
# value of func_name. In awk, the variable NR represents the
# current line number, and target is a variable we expect to be
# passed in on the command line.
NR == target {
print func_name
}

如果你把它放在一个名为 findline.awk 的文件中并像这样调用它:

awk -f findline.awk -vtarget=26 mysourcefile.src

然后它将打印包含第 26 行的函数的名称。编写的这个脚本不是非常健壮,但它希望能为您提供一些关于如何继续的想法。

参见 awk documentation有关 gensub 函数的详细信息。

关于linux - 如何从行号中查找封装函数名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55224208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com