There's lots of detail in my question here https://stackoverflow.com/questions/67240792/gprof-producing-no-output-for-a-program-that-takes-reasonable-time-to-execute

To summarise:

1. I'm using Mingw64 latest packages from MSYS2
2. Program is compiled and linked with -g -pg
3. Program, when executed, produces gmon.out
4. Parsing gmon.out through gprof gives empty results

I've checked:

1. Program exits normally
2. I've tested two different programs (code below) in an attempt to ensure there's enough time spent in the functions to generate results. Both programs take a long time to execute.
3. I've compiled with and without -no-pie
4. I've tried both 32bit and 64bit releases
5. Tried both GCC and G++

In the stack overflow question I've also provided additional info from VTune (that I don't fully understand).

Everyone else who's compiled and tested the programs gives them a gmon.out and gprof gives them output. I'm not sure what else I can do to figure out why I'm unable to profile code. I've asked MSYS2 devs but they've not responded. Considering MSYS2 is pretty much just packaging Mingw64 I was hoping someone in this mailing list might be able to help, or at least point me in the right direction.


Program for Primes:

#include <iostream>

bool is_prime(const int& number)
{
    if(number == 0 || number == 1)
        return false;
    else
    {
        for(int i = 2; i <= number / 2; ++i)
        {
            if(number % i == 0)
            {
                return false;
            }
        }
    }

    return true;
}

int main()
{
    int low = 0;
    int high = 1000000;

    while(low < high)
    {
        if(is_prime(low))
            std::cout << low << ", ";

        ++low;
    }

    std::cout << std::endl;

    return 0;
}


Program for long function calls:

//test_gprof.c
#include<stdio.h>

void new_func1(void)
{
    printf("\n Inside new_func1()\n");
    int i = 0;

    for(;i<0xffffffff;i++);

    return;
}

void func1(void)
{
    printf("\n Inside func1 \n");
    int i = 0;

    for(;i<0xffffffff;i++);
    new_func1();

    return;
}

static void func2(void)
{
    printf("\n Inside func2 \n");
    int i = 0;

    for(;i<0xffffffff;i++);
    return;
}

int main(void)
{
    printf("\n Inside main()\n");
    int i = 0;

    for(;i<0xffffff;i++);
    func1();
    func2();
    func1();
    func2();

    return 0;
}

Any help would be greatly appreciated.

Cheers,
David



_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to