2010-06-20 50 views
8

我有一些非常大的C文件,它有很多函數。我需要在運行時跟蹤執行路徑。我無法通過調試來追蹤它,因爲它是目前在qemu上運行並執行大量二進制翻譯的管理程序代碼。將printf添加到文件中所有函數的起始處

任何人都可以指向Perl或Python中的某些腳本,它可以在所有函數啓動時添加一個printf,文本可能類似於「我在<函數名稱>」?

回答

23

編譯時只需將-finstrument-functions傳遞給gcc。有關詳細信息,請參閱gcc(1)手冊頁。

+1

對問題精神的完美回答。 – 2010-06-20 09:12:13

+2

+1。只需添加,然後輸入代碼可能如下所示: printf(「功能詳細信息:%s \ n」,____PRETTY_FUNCTION____); ____PRETTY_FUNCTION____是預定義的宏,提供一個包含函數名稱+簽名的字符串。 – Fanatic23 2010-06-20 10:52:03

+0

注意:您需要手動實現每個跟蹤函數,或者使用像etrace這樣的工具來解析ELF併爲您生成這些調用:https://stackoverflow.com/questions/6176284/why-doesnt-finstrument-functions - 工作換我 – 2017-11-05 11:06:36

相關問題