Re: [問題] 請問有什麼軟體可以畫出function flow的?

看板C_and_CPP作者 (科科:))時間9年前 (2015/01/11 16:52), 編輯推噓2(208)
留言10則, 5人參與, 最新討論串2/2 (看更多)
謝謝推文的建議 我盡量的把每個方法都去試看看 : 推 christianSK: callgrind? 然後後來有用了christianSK所提到的callgrind 再去找有發現Vargrind好像有提供此類的功能 執行下面的指令 $ valgrind --tool=callgrind --dump-instr=yes ./hello.o 再用下面去打開檔案 $ kcachegrind callgrind.out.20547 http://ppt.cc/~MJI 如上圖會有顯示Call Graph 但...我C++檔案例子是印出helloword而已 怎麼會call這麼多東西? 內容也看不太懂 囧 就算換成 a() → b() → c() 這樣呼叫的C++檔案 所顯示的Call Graph還是長得差不多 這好像不是我想要的? 還是這Call Graph裡面的內容該怎麼解讀呢? 另外, : 推 Killercat: 你想說的是Sequence Diagram吧... Killercat 所提到的 Sequence Diagram 我去GOOGLE之後發現好像比較接近我要的 請問有什麼軟體或套件可以顯示這個的嗎? 有任何建議歡迎提出 謝謝大家的指教~ 謝謝 :) ※ 引述《smilekerker (科科:))》之銘言: : 標題: [問題] 請問有什麼軟體可以畫出function flow的? : 時間: Fri Jan 9 08:02:43 2015 : : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : Linux : : 問題(Question): : : 請問有什麼軟體可以畫出function flow(名稱我也不太會取,可能是其他種)的? : : 程式碼(Code):(請善用置底文網頁, 記得排版) : : int a(){ : int x; : x= b(); : return x; : } : : int b(){ : int x; : x= c(); : return x; : } : : int c(){ : int x=10; : return x; : } : : int main(){ : int x; : x= a(); : return 0; : } : : : 補充說明(Supplement): : : 像是上述程式碼,一層一層呼叫進去再回來 : : 有無軟體可以將這樣的流程(圖)畫出來呢? : : 或是用其他方式呈現之類的 : : 要google苦無不太知道關鍵字是什麼,找不太到 : : 謝謝 :) : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.187.212 : ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1420761766.A.139.html : 推 cjcat2266: 有些profiler可以呈現call stack 01/09 08:37 : → cjcat2266: 不知道是不是你要的 01/09 08:37 : → cjcat2266: 也可以在函式的scope裡面自己插入視覺化邏輯 01/09 08:39 : → smilekerker: 請問profiler是...? 可以多提供一點訊息,我試看看~ 01/09 08:42 : → smilekerker: 嗯,因為要看是open source,不是自己寫的,目前還沒 01/09 08:43 : → smilekerker: 有能力自己修改程式碼,只能找tool來幫助看code 01/09 08:43 : → smilekerker: 所以才想說有沒有這類的軟體可以幫忙畫個圖以助釐清 01/09 08:44 : 推 christianSK: callgrind? 01/09 09:15 : → carylorrk: doxygen 或 clang? 01/09 10:57 : 推 LiloHuang: 花錢買個好工具也許是一個方法 http://goo.gl/pygzRr 01/09 11:03 : → LiloHuang: Understand 有提供各種平台的版本,包含 Linux x86/x64 01/09 11:05 : 推 PoorLoser: Edraw Mind Map 免費版的功能已夠用 01/09 11:11 : → carylorrk: 如果有些需要 runtime 才知道的(ex:function pointer) 01/09 11:23 : → carylorrk: 才需要用到 profiler...還可以畫 edge probability XD 01/09 11:24 : 推 carylorrk: 有些 static analyzer 可以算出來,但是特定情況的 01/09 11:28 : → carylorrk: indirect call 還是需要 runtime 跑跑看XD 01/09 11:28 : : 謝謝各位的建議, : : 我剛剛才又不小心發現我之前在看的Souce code(GEM5)官方所提供的"網頁" : : 是用doxygen所產生的,網頁下方有一行是這樣說的 : : http://www.gem5.org/docs/html/index.html : : : 所以,如果我沒有理解錯誤, : : 他是將靜態的function怎麼連結與呼叫給產生出來? : : 所以無法將程式真的執行動態路徑(呼叫各個function)給描繪出來? : : 也就是,舉個例, : : 根據上面的程式碼部份再多增加兩個小function d(), e() : : x但真的執行的時後不會去叫用到這兩個 : : int a(){ : int x; : x= b(); : return x; : } : : int b(){ : int x; : x= c(); : return x; : } : : int c(){ : int x=10; : return x; : } : : : int d(){ : int y; : y= e(); : return y; : } : : int e(){ : int y=10; : return y; : } : : int main(){ : int x; : x= a(); // 只有叫用到a() b() c()三個 : return 0; : } : : 那看網頁上的介紹是會把"兩串"都畫出來 : : 但事實上我只要看真的有跑的那些就好的話呢? : : 煩請指點!!! : : 謝謝 :) : : : : ※ 編輯: smilekerker (140.116.187.212), 01/09/2015 16:08:25 : 推 Killercat: 你想說的是Sequence Diagram吧.... 01/09 17:44 : → Killercat: 某些付費軟體如Enterprise Architect有從runtime parse 01/09 18:05 : → Killercat: 出sequence diagram(逆向工程)的方法 不過已C/C++來講 01/09 18:05 : → Killercat: 這應該都不會是免費的... Java比較有機會找到免費的 01/09 18:05 : → carylorrk: perf 我記得也可以畫出(文字版的)call graph... 01/09 18:19 : → Killercat: 自畫的話一堆免費軟體都能做到倒是真的... XD 01/09 18:29 : → Killercat: 要逆向工程runtime幫你分析畫出來的話就比較..... 01/09 18:29 : 推 tubbysong: Source Insight 01/09 18:36 : → carylorrk: perf 的 call graph 是 runtime 的 call stack 啊XD 01/09 18:36 : → tubbysong: Source Insight 菜吧看碼神器 01/09 18:37 : → carylorrk: 而且至少樹狀圖看起來還 OK 啦~ 01/09 18:37 : 推 michael0728n: Astah? 不過讓它幫畫好像要錢 01/09 18:57 : → michael0728n: Source Insight可以畫圖嗎?! 01/09 18:57 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.187.212 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1420966344.A.EC4.html

01/11 18:21, , 1F
看到這個議題,推文一定會出現自我修養那本書XD
01/11 18:21, 1F

01/12 07:34, , 2F
請問是哪本書 ~ 囧
01/12 07:34, 2F

01/13 14:26, , 3F
就叫做程式設計師的自我修養 要是能耐心看完的話
01/13 14:26, 3F

01/13 14:26, , 4F
保證你以後寫code都會很有修養
01/13 14:26, 4F

01/13 14:29, , 5F
我還真的沒有一次從頭到尾看完過...
01/13 14:29, 5F

01/13 14:38, , 6F
其實profile自己的application程式不用管系統怎麼做吧
01/13 14:38, 6F

01/13 14:39, , 7F
kcachegrind可以依照 function 名稱排序,有namespace
01/13 14:39, 7F

01/13 14:40, , 8F
的話sort後很容易找到要看的function, 再看那些就好
01/13 14:40, 8F

01/13 14:43, , 9F
你用的例子太trivial所以看不出什麼
01/13 14:43, 9F

01/13 14:45, , 10F
執行時間長一點 profile 才有意義
01/13 14:45, 10F
文章代碼(AID): #1KiZd8x4 (C_and_CPP)
文章代碼(AID): #1KiZd8x4 (C_and_CPP)