111 / 98 / 84
Регистрация: 18.12.2015
Сообщений: 567
1

Qt Creator профилирование кода

02.06.2017, 20:02. Показов 7259. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Хочу проверить свой проект на Qt на утечки памяти. Есть вкладка Анализ. Но она для Valgrind который в Windows нет поддержки.

Добавлено через 4 часа 11 минут
Какие профайлеры можно подтянуть в Qt и как их настраивать.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2017, 20:02
Ответы с готовыми решениями:

Сворачивание кода Qt Creator
Скажите, можно ли как-нибудь свернуть часть кода, не комментя его?

Просмотр кода в Qt Creator
Как просмотреть и отредактировать код qt Creator, например PushButton.

Qt Creator - разворачиваются свернутые участки кода после перезапуска
В редакторе можно нажимать на стрелку, чтобы сворачивать участки кода в одну строчку. После каждого...

Профилирование кода
Если кто знает помогите, пожалуйста Сделать скрин на котором видно : покрытие кода(сколько строк...

4
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
03.06.2017, 00:18 2
Лучший ответ Сообщение было отмечено Wyn как решение

Решение

Is there a good Valgrind substitute for Windows?
Free Application to check Memory Leaks in Windows x64?
0
182 / 37 / 5
Регистрация: 29.01.2013
Сообщений: 253
07.06.2017, 11:10 3
В http://www.codeblocks.org/ есть профайлер в Windows, можно на крайняк им попрофилировать.

Добавлено через 12 минут
По сути там используется gprof
И выглядит это так в коде ( codeblocks-16.01.release\src\plugins\contrib\profiler\cbprofilerexec.cpp ):
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
int CBProfilerExecDlg::Execute(wxString exename, wxString dataname, struct_config config)
{
    // gprof optional parameters
    wxString param = config.txtExtra;
    if (config.chkAnnSource && !config.txtAnnSource.IsEmpty()) param << _T(" -A")  << config.txtAnnSource;
    if (config.chkMinCount)                                    param << _T(" -m ") << config.spnMinCount;
    if (config.chkBrief)                                       param << _T(" -b");
    if (config.chkFileInfo)                                    param << _T(" -i");
    if (config.chkUnusedFunctions)                             param << _T(" -z");
    if (config.chkStaticCallGraph)                             param << _T(" -c");
    if (config.chkNoStatic)                                    param << _T(" -a");
    if (config.chkSum)                                         param << _T(" -s");
 
    wxString cmd;
    cmd << _T("gprof ") << param << _T(" "") << exename << _T("" "") << dataname << _T(""");
 
    int pid = -1;
 
    { // begin lifetime of wxBusyInfo
      wxBusyInfo wait(_("Please wait, while running gprof..."), parent);
      Manager::Get()->GetLogManager()->DebugLog(F(_T("Profiler: Running command %s"), cmd.wx_str()));
      pid = wxExecute(cmd, gprof_output, gprof_errors);
    } // end lifetime of wxBusyInfo
 
    if (pid == -1)
    {
        wxString msg = _("Unable to execute gprof.\nBe sure the gprof executable is in the OS global path.\nC::B Profiler could not complete the operation.");
        cbMessageBox(msg, _("Error"), wxICON_ERROR | wxOK, (wxWindow*)Manager::Get()->GetAppWindow());
        Manager::Get()->GetLogManager()->DebugLog(msg);
 
        return -1;
    }
    else
    {
        wxXmlResource::Get()->LoadObject(this, parent, _T("dlgCBProfilerExec"),_T("wxScrollingDialog"));
        wxFont font(10, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
        outputFlatProfileArea     = XRCCTRL(*this, "lstFlatProfile",     wxListCtrl);
        outputHelpFlatProfileArea = XRCCTRL(*this, "txtHelpFlatProfile", wxTextCtrl);
        outputHelpFlatProfileArea->SetFont(font);
        outputCallGraphArea       = XRCCTRL(*this, "lstCallGraph",       wxListCtrl);
        outputHelpCallGraphArea   = XRCCTRL(*this, "txtHelpCallGraph",   wxTextCtrl);
        outputHelpCallGraphArea->SetFont(font);
        outputMiscArea            = XRCCTRL(*this, "txtMisc",            wxTextCtrl);
        outputMiscArea->SetFont(font);
 
        if(!gprof_output.IsEmpty())
            ShowOutput(gprof_output, false);
        else
            ShowOutput(gprof_errors, true);
    }
 
    return 0;
}
 
void CBProfilerExecDlg::ShowOutput(const wxArrayString& msg, bool error)
{
    const size_t maxcount(msg.GetCount());
    if ( !maxcount )
        return;
 
    if (!error)
    {
        wxProgressDialog progress(_("C::B Profiler plugin"),_("Parsing profile information. Please wait..."), maxcount, NULL, wxPD_AUTO_HIDE|wxPD_APP_MODAL|wxPD_SMOOTH);
 
        // Parsing Flat Profile
        size_t count(0);
        if (msg[count].Find(_T("Flat profile")) != -1)
            ParseFlatProfile(msg, progress, maxcount, count);
 
        // Parsing Call Graph
        if ((count < maxcount) &&
            (msg[count].Find(_T("Call graph"))   != -1))
            ParseCallGraph(msg, progress, maxcount, count);
 
        // The rest of the lines, if any, is printed in the Misc tab
        ParseMisc(msg, progress, maxcount, count);
    }
    else
    {
        wxString output;
        for (size_t count(0); count < maxcount; ++count )
        {
            output << msg[count] << _T("\n");
        }
        outputMiscArea->SetValue(output);
        const wxColour colour(255,0,0);
        outputMiscArea->SetForegroundColour(colour);
    }
 
    ShowModal();
}
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
07.06.2017, 11:41 4
trdm, насколько помню в gprof нет детектора утечек памяти.

Утечки еще можно поискать через tcmalloc(из gperftools) и jemalloc, т.к. те переопределяют функции выделения памяти. Но эти инструменты не встроены в IDE.
0
182 / 37 / 5
Регистрация: 29.01.2013
Сообщений: 253
07.06.2017, 15:46 5
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
trdm, насколько помню в gprof нет детектора утечек памяти.
Автор слегка намешал понятий. Профилировщик позволяет увидеть узкие места в программе.
Валгрид - немного другое.
Каюсь, только на заголовок обратил внимание.
Ну и на мой взгляд одного валгрида недостаточно. Можно еще единорогом пройтись (PVS-Studio).
0
07.06.2017, 15:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2017, 15:46
Помогаю со студенческими работами здесь

Рекомендации по оптимизации/ускорению кода и памяти, разбор ключей, профилирование приложений в VS и не только
Вечер добрый форум, у меня на данный момент VS2010. Я так понимаю настройки сохраняется только для...

Qt Creator и автодополнение кода
Решил попробовать Qt Creator в качестве IDE для С++ проектов вместе с mingw 4.8.1. Заметил, что не...

Профилирование и темы
Скажите как сделать так чтобы пользователь мог выбрать из списка какую либо тему( созданную заранее...

профилирование функции
здравствуйте, вообщем, надо функцию профилировать, а тут ошибки какие-то выводит(( есть функция...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru