簡體   English   中英

如何讓 callgrind 轉儲源行信息?

[英]How do I get callgrind to dump source line information?

我正在嘗試在 GNU/Linux 上分析一個執行實時音頻處理的共享庫,因此性能很重要。 我運行另一個程序,將它連接到我系統的音頻輸入和輸出,並使用 callgrind 對其進行配置。

查看 KCacheGrind 中的結果,我獲得了有關哪些函數占用了我大部分時間的重要信息。 但是,它不會讓我逐行查看信息,而是說我需要使用調試符號編譯它並再次運行分析。

我正在分析的程序不是用調試符號編譯的,但庫是。 我知道這一點,因為有趣的是, cachegrind 的源代碼注釋工作正常。

當我運行 callgrind 時,它說默認是轉儲源代碼行信息,但它並沒有這樣做。 有什么方法可以強迫它,或者找出阻止它的原因?

您是否使用--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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM