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

看板C_and_CPP作者 (科科:))時間9年前 (2015/01/09 08:02), 9年前編輯推噓10(10022)
留言32則, 11人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 請問有什麼軟體可以畫出function flow(名稱我也不太會取,可能是其他種)的? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(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

01/09 08:37, , 1F
有些profiler可以呈現call stack
01/09 08:37, 1F

01/09 08:37, , 2F
不知道是不是你要的
01/09 08:37, 2F

01/09 08:39, , 3F
也可以在函式的scope裡面自己插入視覺化邏輯
01/09 08:39, 3F

01/09 08:42, , 4F
請問profiler是...? 可以多提供一點訊息,我試看看~
01/09 08:42, 4F

01/09 08:43, , 5F
嗯,因為要看是open source,不是自己寫的,目前還沒
01/09 08:43, 5F

01/09 08:43, , 6F
有能力自己修改程式碼,只能找tool來幫助看code
01/09 08:43, 6F

01/09 08:44, , 7F
所以才想說有沒有這類的軟體可以幫忙畫個圖以助釐清
01/09 08:44, 7F

01/09 09:15, , 8F
callgrind?
01/09 09:15, 8F

01/09 10:57, , 9F
doxygen 或 clang?
01/09 10:57, 9F

01/09 11:03, , 10F
花錢買個好工具也許是一個方法 http://goo.gl/pygzRr
01/09 11:03, 10F

01/09 11:05, , 11F
Understand 有提供各種平台的版本,包含 Linux x86/x64
01/09 11:05, 11F

01/09 11:11, , 12F
Edraw Mind Map 免費版的功能已夠用
01/09 11:11, 12F

01/09 11:23, , 13F
如果有些需要 runtime 才知道的(ex:function pointer)
01/09 11:23, 13F

01/09 11:24, , 14F
才需要用到 profiler...還可以畫 edge probability XD
01/09 11:24, 14F

01/09 11:28, , 15F
有些 static analyzer 可以算出來,但是特定情況的
01/09 11:28, 15F

01/09 11:28, , 16F
indirect call 還是需要 runtime 跑跑看XD
01/09 11:28, 16F
謝謝各位的建議, 我剛剛才又不小心發現我之前在看的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

01/09 17:44, , 17F
你想說的是Sequence Diagram吧....
01/09 17:44, 17F

01/09 18:05, , 18F
某些付費軟體如Enterprise Architect有從runtime parse
01/09 18:05, 18F

01/09 18:05, , 19F
出sequence diagram(逆向工程)的方法 不過已C/C++來講
01/09 18:05, 19F

01/09 18:05, , 20F
這應該都不會是免費的... Java比較有機會找到免費的
01/09 18:05, 20F

01/09 18:19, , 21F
perf 我記得也可以畫出(文字版的)call graph...
01/09 18:19, 21F

01/09 18:29, , 22F
自畫的話一堆免費軟體都能做到倒是真的... XD
01/09 18:29, 22F

01/09 18:29, , 23F
要逆向工程runtime幫你分析畫出來的話就比較.....
01/09 18:29, 23F

01/09 18:36, , 24F
Source Insight
01/09 18:36, 24F

01/09 18:36, , 25F
perf 的 call graph 是 runtime 的 call stack 啊XD
01/09 18:36, 25F

01/09 18:37, , 26F
Source Insight 菜吧看碼神器
01/09 18:37, 26F

01/09 18:37, , 27F
而且至少樹狀圖看起來還 OK 啦~
01/09 18:37, 27F

01/09 18:57, , 28F
Astah? 不過讓它幫畫好像要錢
01/09 18:57, 28F

01/09 18:57, , 29F
Source Insight可以畫圖嗎?!
01/09 18:57, 29F

01/17 08:41, , 30F
linux的gprofile?
01/17 08:41, 30F

01/28 19:58, , 31F
valgrind + kcachegrind 能產生call graph的圖
01/28 19:58, 31F

文章代碼(AID): #1Khngc4v (C_and_CPP)
文章代碼(AID): #1Khngc4v (C_and_CPP)