我想將我編譯的目標代碼連接到C++代碼,然後檢查是否執行了某行代碼。 如何做到這兩件事?如何編寫簡單的調試器?
如果解釋不是簡單的(我敢打賭它不是),至少有人能指出一些網頁解釋如何做到這一點?
據我所知,該解決方案是針對不同平臺的不同,但我感興趣的是如何在Windows和Linux(Linux的啓動)完成
我想將我編譯的目標代碼連接到C++代碼,然後檢查是否執行了某行代碼。 如何做到這兩件事?如何編寫簡單的調試器?
如果解釋不是簡單的(我敢打賭它不是),至少有人能指出一些網頁解釋如何做到這一點?
據我所知,該解決方案是針對不同平臺的不同,但我感興趣的是如何在Windows和Linux(Linux的啓動)完成
gdb的源代碼容易理解嗎? – Calmarius 2013-08-23 12:24:25
在你的評論說:「我只是想收集關於如何執行過程中檢查哪些方法/執行功能的信息,以及有多少次」。
如果這是您想要實現的目標,那麼使用諸如gprof的分析器。
用-g -pg編譯你的程序,當你的程序結束時它會創建一個可以由gprof處理的文件來顯示你想要的內容。
沒錯,但我想從我的應用程序中完成 - 無需編譯庫或帶有其他選項的程序(-pg爲gcc)。 – 2011-04-18 13:09:25
我懷疑你並不是真的需要一個調試器,而是一個探查器。我喜歡http://valgrind.org/docs/manual/cl-manual.html的callgrind,它有一個很好的圖形環境http://kcachegrind.sourceforge.net/。
要嘗試我會使用
$ valgrind --tool=callgrind ./myapp
$ kcachegrind callgrind.out.xxx
這不是我真正想要的,但valgrind是開源的。所以,謝謝你的提示:) – 2011-04-18 13:10:08
爲什麼不直接使用現有的調試器? – Erik 2011-04-18 11:19:39
@Erik我知道調試器非常複雜,我不想創建一個。我只想收集有關如何檢查在執行過程中執行哪些方法/函數以及執行多少次的信息。 – 2011-04-18 12:05:59
「編譯目標代碼」是什麼?根據你的控制級別,它可能就像在你想知道的代碼行之前/之後添加printf()語句一樣簡單。或者,您可能想要了解如何覆蓋您選擇的平臺上的功能(有時稱爲混搭)。在很多平臺上,你可以用你自己的函數替換鏈接器表中的函數的條目,做你的printf,然後把它叫做原文。在最壞的情況下,您也可以用跳轉指令替換函數的第一條機器指令。 – uliwitness 2015-11-28 13:50:41