[問題] function name

看板C_and_CPP作者 (瓜子被蜀國的狗吃了)時間14年前 (2011/04/27 00:28), 編輯推噓6(609)
留言15則, 5人參與, 最新討論串1/3 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) c++ 問題(Question): 請問有方法可以抓出此堆疊所有的function name嗎 補充說明(Supplement): 網路上面我只有找到__FUNCTION__可以直接印出現在這個function的名稱 然後我也有找到backtrace這個,可是這好像一定要linux環境,所以想請問一下 大家有沒有什麼好方法可以知道堆疊中的函式名稱,謝謝QQ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.44.228

04/27 00:30, , 1F
各大 Debugger 都能顯示,你是要自己印?
04/27 00:30, 1F

04/27 00:33, , 2F
自己印的困難點在,如果是比如 user32.dll 某函數,你要有
04/27 00:33, 2F

04/27 00:33, , 3F
處理 pdb 檔的能力,才能把位址轉函數名稱。
04/27 00:33, 3F

04/27 00:40, , 4F
恩是想要自己印QQ
04/27 00:40, 4F

04/27 00:41, , 5F
所以說windows沒有像是backtrace之類的函式喔XD
04/27 00:41, 5F

04/27 00:41, , 6F
原本沒想說這麼複雜的
04/27 00:41, 6F

04/27 02:18, , 8F
用winapi StackWalk
04/27 02:18, 8F

04/27 02:40, , 9F
恩找了很久都沒找到這個~謝謝^^~這個應該就可以了
04/27 02:40, 9F

04/27 09:03, , 10F
CodeProject 這篇寫得很棒,自己看 DbgHelp 文件來寫也不
04/27 09:03, 10F

04/27 09:04, , 11F
容易,這作者都幫你寫好了。先用StackWalk64取得frame裡面
04/27 09:04, 11F

04/27 09:04, , 12F
的位址,再用 SymGetSymFromAddr64 把位址轉函數名稱
04/27 09:04, 12F

04/27 09:05, , 13F
最後用 UnDecorateSymbolName 將名稱修飾去掉,一波三折
04/27 09:05, 13F

04/27 09:10, , 14F
Cool~~先bookmark起來:)
04/27 09:10, 14F

04/27 14:43, , 15F
雖然將來用到的機會不高,還是通篇抓進Evernote存下來XD
04/27 14:43, 15F
文章代碼(AID): #1DjlAGt_ (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DjlAGt_ (C_and_CPP)