我想知道是否有記錄只是的彙編代碼指令的一種方式,是執行。這可以通過使用GDB來實現嗎?日誌彙編代碼執行
Q
日誌彙編代碼執行
-4
A
回答
1
理論上,將CPU置於單步模式非常簡單,並且在執行時記錄每條指令。實際上,你不能合理地計劃這樣做的時間超過幾秒鐘(或者一般訂單上的某些事情)。讓我們通過一些數學來理解爲什麼。
現在,我們假設一個地址佔用32位。我們假設典型的指令平均使用大約2個字節的數據。一個典型的CPU可能運行在2.5 GHz,並且每個週期執行大約2條指令。因此,記錄單個指令需要大約6個字節的數據。 CPU每秒執行大約50億次。做數學計算,這意味着記錄一秒鐘的執行將需要大約6 * 50億字節=每秒30千兆字節(每個核心)。
如果我們把它寫入RAM,我們可能預期執行速度會比正常慢一點,所以執行和記錄一秒鐘將需要幾分鐘。然而,當我們用完RAM時(以30GB/s,我們會很快),並且必須將數據寫入磁盤,我們的帶寬(即使是相當快的SSD)也會下降很多,所以執行速度將很快甩掉很多。同樣,目前,我(或多或少)假設我們可以完全使用(例如)至少一個內核來收集和記錄由另一個內核生成的數據。如果我們想從四核(比如說)中記錄數據,那麼數據收集可能會減慢一些數據的收集速度,並且(更糟糕的)數據生成的速度也會增加4倍(所以我們有一個核心來收集120 GB/s)。這顯然會變得更加困難。
從那裏我們遇到了另一個明顯的問題:我們將如何處理這個數據的山?考慮到我們生產的數量,顯然最好在執行過程中進行儘可能多的處理以找到我們真正關心的數據,而不是僅僅收集所有數據,而不管它最終會變得多麼無用。
所有這一切說,我不認爲gdb真的是這份工作的正確工具。如果你真的堅持這樣做(可能是一個糟糕的主意,但是......),你幾乎肯定希望代碼專門用於處理這個特定的工作。
相關問題
- 1. 日誌執行源代碼行
- 2. 用python執行彙編代碼
- 3. Java - 執行日誌代碼的錯誤
- 4. 彙編代碼
- 5. C++彙編代碼
- 6. GMP-彙編代碼?編譯代碼
- 7. 彙編&C - 翻譯C'S代碼彙編
- 8. 如何在CMD Windows XP中執行彙編語言代碼?
- 9. 如何在應用程序啓動時執行彙編代碼
- 10. 如何執行機器代碼(學習彙編)
- 11. 在ubuntu上運行彙編代碼
- 12. 彙編代碼跳過一行?
- 13. 斯卡拉2.12日誌彙編SBT 0.13.16
- 14. C++代碼中的彙編代碼
- 15. 從C#代碼生成彙編代碼?
- 16. CachedAnonymousMethodDelegate1從代碼反彙編代碼
- 17. 彙編代碼到C代碼
- 18. 寫彙編代碼的C++
- 19. Keil arm startup.s彙編代碼
- 20. 在彙編代碼中
- 21. 從c反彙編代碼#
- 22. sin(x)的彙編代碼
- 23. 調試反彙編代碼
- 24. 解釋彙編代碼
- 25. 含義的彙編代碼
- 26. Fortran示例代碼彙編
- 27. 閱讀彙編代碼
- 28. 彙編代碼說明
- 29. 彙編代碼的說明
- 30. C代碼MIPS彙編
代碼中的所有內容都是*只是程序集* – Ari0nhh
反彙編二進制代碼會更容易......這將爲您提供所有已執行的指令。如果您需要關注分支等,請添加*特定的*日誌代碼。 –
[Process Record](https://www.sourceware.org/gdb/wiki/ProcessRecord/Tutorial)可能是您要查找的內容中最接近的。 – ks1322