亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用C或C ++打印調用堆棧

用C或C ++打印調用堆棧

C++ C
藍山帝景 2019-08-17 14:49:49
用C或C ++打印調用堆棧有沒有辦法在每次調用某個函數時在C或C ++中正在運行的進程中轉儲調用堆棧?我的想法是這樣的:void foo(){    print_stack_trace();    // foo's body    return}其中的print_stack_trace工作方式類似于callerPerl。或類似的東西:int main (void){     // will print out debug info every time foo() is called     register_stack_trace_function(foo);      // etc...}在哪里register_stack_trace_function放置某種內部斷點,這將導致在調用時打印堆棧跟蹤foo。在某些標準C庫中是否存在這樣的事情?我正在使用GCC在Linux上工作。背景我有一個測試運行,基于一些不應該影響此行為的命令行開關,行為不同。我的代碼有一個偽隨機數生成器,我假設它是基于這些開關被不同地調用的。我希望能夠使用每組開關運行測試,并查看隨機數生成器是否針對每個開關進行不同的調用。
查看完整描述

3 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

對于僅支持linux的解決方案,您可以使用backtrace(3),它只返回一個數組void *(實際上每個都指向相應堆棧幀的返回地址)。要將這些翻譯成有用的東西,有backtrace_symbols(3)

注意回溯(3)中注釋部分

如果不使用特殊鏈接器選項,則符號名稱可能不可用。對于使用GNU鏈接器的系統,必須使用-rdynamic鏈接器選項。請注意,“靜態”函數的名稱不會公開,并且在回溯中不可用。


查看完整回答
反對 回復 2019-08-17
  • 3 回答
  • 0 關注
  • 1867 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號