mtrace.awk

来自「一个C源代码分析器」· AWK 代码 · 共 51 行

AWK
51
字号
##  Awk program to analyze mtrace.c output.#{  if ($1 == "@") {    where = " (" $2 ")"    n = 3  } else {    where = ""    n = 1  }  if ($n == "+") {    if (allocated[$(n+1)] != "")      print "+", $(n+1), "Alloc", NR, "duplicate:", allocated[$(n+1)], wherewas[$(n+1)], where;    else {      wherewas[$(n+1)] = where;      allocated[$(n+1)] = $(n+2);    }  } else if ($n == "-") {    if (allocated[$(n+1)] != "") {      wherewas[$(n+1)] = "";      allocated[$(n+1)] = "";      if (allocated[$(n+1)] != "")	print "DELETE FAILED", $(n+1), allocated[$(n+1)];    } else      print "-", $(n+1), "Free", NR, "was never alloc'd", where;  } else if ($n == "<")	{    if (allocated[$(n+1)] != "") {      wherewas[$(n+1)] = "";      allocated[$(n+1)] = "";    } else      print "-", $(n+1), "Realloc", NR, "was never alloc'd", where;  } else if ($n == ">") {    if (allocated[$(n+1)] != "")      print "+", $(n+1), "Realloc", NR, "duplicate:", allocated[$(n+1)], where;    else {      wherewas[$(n+1)] = $(n+2);      allocated[$(n+1)] = $(n+2);    }  } else if ($n == "=") {    # Ignore "= Start"  } else if ($n == "!") {    # Ignore failed realloc attempts for now  }}END {  for (x in allocated)     if (allocated[x] != "")      print "+", x, allocated[x], wherewas[x];}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?