Могу ли я использовать `diff` для отображения не разных, а совпадающих частей?

Чтобы исполняемый файл печатал имена функций по мере их вызова, в системе GNU вы можете использовать опцию gcc's -finstrument-functionsи dladdr()для преобразования адресов в имена функций.

Создать instrument.cлайк:

#define _GNU_SOURCE
#include <dlfcn.h>

#include <stdlib.h>
#include <stdio.h>

#define TRACE_FD 3

void __cyg_profile_func_enter (void *, void *)
   __attribute__((no_instrument_function));

void __cyg_profile_func_enter (void *func,  void *caller)
{
  static FILE* trace = NULL;
  Dl_info info;

  if (trace == NULL) {
    trace = fdopen(TRACE_FD, "w");
    if (trace == NULL) abort();
    setbuf(trace, NULL);
  }
  if (dladdr(func, &info))
    fprintf (trace, "%p [%s] %s\n",
             func,
             info.dli_fname ? info.dli_fname : "?",
             info.dli_sname ? info.dli_sname : "?");
}

А затем скомпилируйте исполняемый файл как:

$ gcc -O0 -rdynamic -finstrument-functions square.c instrument.c -ldl
$./a.out 3>&1
0x400a8f [./a.out] main
0x400a4f [./a.out] square

(здесь используется fd 3 для вывода имен функций, чтобы отделить их от потоков stdout и stderr ).

Вы можете адаптировать код для печати только dli_sname, если вам нужно только имя функции.

0
05.11.2019, 01:52
1 ответ

Форматом вывода diff можно управлять, поэтому в вашем случае необходимо 3 варианта:

diff --old-group-format='' --new-group-format=''  \
     --unchanged-group-format='%=' a.txt  b.txt 

man diffбесполезно читать лучшеinfo diff

или используйтеcomm

1
28.01.2020, 02:39

Теги

Похожие вопросы