Вывод gprof показывает несуществующий край графа вызовов - PullRequest
1 голос
/ 12 июня 2019

Меня интересует профилирование функции grep_source_is_binary() [1], код которой выглядит следующим образом:

static int grep_source_is_binary(struct grep_source *gs,
                 struct index_state *istate)
{
    grep_source_load_driver(gs, istate);
    if (gs->driver->binary != -1)
        return gs->driver->binary;

    if (!grep_source_load(gs))
        return buffer_is_binary(gs->buf, gs->size);

    return 0;
}

График вызовов gprof дает мне эту информацию:

                0.00    1.58  304254/304254      grep_source_1 [6]
[7]     72.9    0.00    1.58  304254         grep_source_is_binary [7]
                0.01    1.20  304254/304254      show_line_header [8]
                0.00    0.37  303314/607568      grep_source_load [15]

Это кажется мне странным, поскольку show_line_header() не вызывается ни grep_source_binary(), ни его детьми.Я неправильно понимаю вывод gprof?

[1]: на https://github.com/git/git/blob/master/grep.c#L2183

1 Ответ

0 голосов
/ 13 июня 2019

Проверьте, оптимизирован ли ваш код компилятором. Если да, отключите его, используя -O0.

...