2014-06-20 66 views
0

我正在使用gcc作爲makefile中定義的編譯器的C++項目。我不能使用不同的編譯器。 我需要做的是解析通過覆蓋從父類繼承的特定方法稱爲behavior()的.cc文件。此方法沒有任何參數,並且一直具有返回類型的void。 我需要在這個行爲()方法中找出循環的存在(for,while和do-while)並以各種方式分析它們,例如找到它們執行的次數等。例如,讓sample.h和sample.cc分別是頭文件和源文件。如何解析cpp文件中的函數以訪問循環

       sample.h 
    class sample_class: public Base 
    { 
    ....; 
    ....; 
    void behavior(); //inherited from Base 
    }; 

           sample.cc 
    void sample_class::behavior() 
    { 
     ....; 
     ....; 
     int n=10; 
     int count=0; 
     int c=2; 
     for(int x=0;x<n;x++) 
     { 
      count=count+n;  //LOOP1  
     } 
     while(int z<5) 
     { 
     c=c*5; //LOOP2 
     } 
    } 

我想要做的是訪問的內容,並同時並能寫的東西,如:

exec_time(behavior)=n*exec_time(LOOP1)+5*exec_time(LOOP2) 

可能有人請指引我爲同時使用我如何能做到這一點GCC作爲編譯器? 非常感謝您的幫助。

+1

也許你可以給出一個函數的例子,以便清楚你的問題是什麼以及預期的結果是什麼。 – rcs

回答

0

「發現他們正在執行的次數」 - 這(和僅此)的要求必然需要運行時計數......你既可以修改相關的功能,使他們的指望,他們是所謂的頻率和保存的調用堆棧每次都要對該輸出進行一些分析,或嘗試使用已經捕獲相同類型信息的分析工具 - 可能是gprof,甚至是量化或valgrind。