c - 如何从C文件中获取所有指针变量

标签 c bash shell ctags

我被分配的任务是在许多 C 文件中的所有指针变量名称中添加 p_ 前缀。这必须应用于函数参数、本地函数数据和全局变量。

一旦获得列表,我就可以使用 sed 来做我想做的事情。

但是我怎样才能获得列表呢?

最佳答案

一切都在调试信息中。

请参阅这个简单的示例 ( ptr.c )。

int *global_pointer;
float global_scalar;
int main(int arg_scalar, char **arg_pointer) {
  void *local_pointer;
  char local_scalar;
}

让我们编译它并检查 objdump 的结果

gcc -g ptr.c && objdump --dwarf=info a.out

这并不难理解。 (DW_TAG_pointer_type) 出现了几次。在我的示例中,有四个。

<1><8d>: Abbrev Number: 6 (DW_TAG_pointer_type)
<1><93>: Abbrev Number: 6 (DW_TAG_pointer_type)
<1><a0>: Abbrev Number: 8 (DW_TAG_pointer_type)
<1><b8>: Abbrev Number: 6 (DW_TAG_pointer_type)

注意它们前面的十六进制数字,并以 DW_AT_type : <0xb8> 的形式查找包含它们的部分。 。类型为 0xb8 的整个部分是:

<1><a2>: Abbrev Number: 9 (DW_TAG_variable)
    <a3>   DW_AT_name        : (indirect string, offset: 0x3a): global_pointer  
    <a7>   DW_AT_decl_file   : 1        
    <a8>   DW_AT_decl_line   : 1        
    <a9>   DW_AT_type        : <0xb8>   
    <ad>   DW_AT_external    : 1        
    <ae>   DW_AT_location    : 9 byte block: 3 78 8 60 0 0 0 0 0        (DW_OP_addr: 600878)

有变量的名称,以及声明它的行。还有文件号,但我只有一个源文件,所以它始终是 1。这就是您查找它所需的全部内容,也许可以使用awk的帮助,除非你做了一些非常丑陋的事情,比如声明一个全局变量,然后声明一个具有相同名称的本地变量,所有这些都在一行中。如果有某种编码标准就不太可能:)

关于c - 如何从C文件中获取所有指针变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31744639/

相关文章:

linux - 如何在 Linux 中 grep '---'? grep : unrecognized option '---'

python - stdout 从 shell 获取之前多于 1 行的内容

bash - 如何在cron中调用脚本时传递参数?

Jenkins Permission Denied 中的 GIT 克隆问题

c - 我收到损坏的变量错误

linux - 在 Bash 中将命令作为字符串执行

linux - 增加或增加作为 grep 结果的整数

python - 将 Python C 扩展链接到另一个库的问题

c - 如何找到二维数组中的鞍点?

从 R 的 C 代码创建共享对象