2017-12-30 6 views
2

ich einen einfachen Test C++ Code als meine erste mit Time Profiler in meinem Mac versucht schrieb:macOS Zeit Profiler Profilierungs C++ Code kann aber nicht meine Funktionsnamen finden

#include <iostream>  // std::cout 

int frank() { return 0; } 

int main() { 
    int a = frank(); 
    std::cout << a << std::endl; 
    return 0; 
} 

Dann habe ich es kompiliert:

g++ test.cpp -o test0

Und ich verwende Zeitprofil meine ausführbare Datei zum Profil test0:

enter image description here

Ich dachte, ich könnte meine Funktion frank() in Call Tree finden, aber ich tat es nicht.

Eine weitere Frage ist, wie Sie im Time Profiler Argumente an eine ausführbare Datei übergeben.

+1

Die meisten Profiler arbeiten mit Stichproben in regelmäßigen kleinen Abständen (statistische Stichproben). Ihre Funktion 'frank' ist wahrscheinlich einfach zu klein (schnell) um vom Sampler abgefangen zu werden. Versuchen Sie es innerhalb einer 0 bis 1.000.000 Schleife aufzurufen. Auch dann wird es möglicherweise nicht angezeigt, da es nur aus zwei Anweisungen bestehen kann. –

+0

Angenommen, Ihr Programm dauert 100 Mikrosekunden. Davon werden etwa 99,999 für I/O ausgegeben. –

Antwort

1

Instruments ist ein Sampling-Profiler, bei dem die Sample-Frequenz zu niedrig ist, um Ihren Aufruf von frank() zu erkennen. Führen Sie entweder eine rechenintensive Berechnung innerhalb der Funktion durch oder rufen Sie sie einfach genug oft auf.

Einstellen Ihres Codes die folgenden (C++ 11), wo eine etwas komplexere Funktion innerhalb einer Schleife aufgerufen:

#include <iostream>  // std::cout 

long frank(const unsigned int n) { return n*n; } 

int main() { 
    const auto nr_iterations = 1000000u; 
    long a; 
    for (auto n = 0u; n < nr_iterations; ++n) 
    { 
     a = frank(n); 
    } 
    std::cout << a << std::endl; 
    return 0; 
} 

Ergebnisse in folgendem Ergebnis in Instruments auf meinem Rechner:

enter image description here

Um Argumente über Instrumente zu übergeben, klicken Sie auf den Zielnamen rechts neben der Aufnahme-Schaltfläche. Klicken Sie im angezeigten Kontextmenü auf "Ziel bearbeiten", wobei "Ziel" der Name Ihrer ausführbaren Datei ist. Zum Beispiel:

enter image description here

ein Dialogfenster angezeigt, in dem Sie eingeben können die Argumente.

+0

Ich benutzte Ihren Code und kompilierte ihn mit 'g ++ test.cpp -o test0 --std = C++ 11', aber ich habe immer noch den gleichen Call Tree wie zuvor. – Frank

+1

@Frank Was passiert, wenn Sie nr_iterations erhöhen? Sagen Sie 10e6 zum Beispiel – OnMyLittleDuck

+0

@Frank Ich habe das Codebeispiel bearbeitet, um die Wahrscheinlichkeit zu erhöhen, den Aufruf innerhalb des Profilers zu sehen. Hilft das? – OnMyLittleDuck