[英]How do I get callgrind to dump source line information?
我正在嘗試在 GNU/Linux 上分析一個執行實時音頻處理的共享庫,因此性能很重要。 我運行另一個程序,將它連接到我系統的音頻輸入和輸出,並使用 callgrind 對其進行配置。
查看 KCacheGrind 中的結果,我獲得了有關哪些函數占用了我大部分時間的重要信息。 但是,它不會讓我逐行查看信息,而是說我需要使用調試符號編譯它並再次運行分析。
我正在分析的程序不是用調試符號編譯的,但庫是。 我知道這一點,因為有趣的是, cachegrind 的源代碼注釋工作正常。
當我運行 callgrind 時,它說默認是轉儲源代碼行信息,但它並沒有這樣做。 有什么方法可以強迫它,或者找出阻止它的原因?
請參閱valgrind常見問題解答,特別是4.2和4.3
http://valgrind.org/docs/manual/faq.html#faq.unhelpful
http://valgrind.org/docs/manual/faq.html#faq.aliases
您是否使用--dump-instr=yes --trace-jump=yes
來獲取指令級別信息?
由於您已正確識別callgrind
默認情況下在源代碼級別執行事件計數。 引用callgrind
的手冊頁 -
--dump-line=<no|yes> [default: yes]
但隨后的后處理過程中,你必須提供的路徑,源文件的callgrind_annotate
使用該工具--include
選項它來生成帶注釋的源代碼與行信息一致。 引用callgrind_annotate
的手冊頁 -
-I, --include=<dir>
Add dir to the list of directories to search for source files.
這是對我有用的示例命令 -
callgrind_annotate --auto=yes --include=/home/sangeek/source callgrind.out.15078 > callgrind.annotate.txt
另請注意,源代碼級別的注釋報告放在file:function
中通常的file:function
摘要報告之后。 因此,您必須滾動瀏覽報告中的內容才能找到它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.