我正在開發一個基於F#語言的功能語言的llvm前端。那麼,功能語言與價值的概念相匹配,而不是變量。 F#也通過所謂的「可變值」支持變量,我可以將它建模爲%llvm.dbg.declare()來跟蹤該值。但我不知道如何跟蹤價值。一個值不是由alloca創建的,它只是一個值,不會改變。並且這些例子都告訴了C這樣的命令式語言的實現,它沒有這個不變的價值概念。任何人都對功能風格語言的調試信息有一些建議或暗示?如何在llvm源代碼級調試信息中表示函數式語言調試信息?
3
A
回答
0
對於SSA值,您使用@llvm.dbg.value()
而不是@llvm.dbg.declare
。首先,您必須爲@llvm.dbg.declare
定義本地值的元數據,下面我假設它定義爲!4
。該LLVM IR看起來像
%x = ...
call void @llvm.dbg.value(metadata !{ i32 %x }, i64 0, metadata !4)
我從http://nondot.org/sabre/LLVMNotes/DebugInfoVariableInfo.txt描述mem2reg是如何將調試信息得到了這個信息。這可能與當前的LLVM實踐有關,因此您可以使用alloca
s和@llvm.dbg.declare
編寫一些IR,然後運行mem2reg傳遞以查看轉換爲SSA時調試信息的更改方式。
相關問題
- 1. 調試信息
- 2. 調試信息
- 3. -sass-調試信息
- 4. GCC調試信息
- 5. DLL調試信息
- 6. 處理調試信息
- 7. libusb-1.0調試信息
- 8. Tomcat/Java調試信息
- 9. MediaElement.js - 讓調試信息
- 10. Firemonkey「否調試信息」
- 11. 刪除調試信息
- 12. 什麼是調試信息?
- 13. 檢索從調試信息
- 14. 如何不爲特定源文件/源代碼段生成調試信息?
- 15. 使用messagebox顯示調試信息
- 16. 未顯示調試信息Eclipse
- 17. 如何記錄ssh調試信息?
- 18. 如何重命名調試信息?
- 19. 調試信息與UDF在Hive中
- 20. 在調試中查找地址信息
- 21. 如何控制glib中調試信息的級別?
- 22. VS內置的DLL沒有調試信息。甚至包含調試信息
- 23. 當沒有調試信息顯示時調試Django | Django
- 24. 如何調試使用調試信息編譯的共享庫
- 25. 如何在llvm中調試jitted函數?
- 26. 在Nemiver中調試vala/clutter程序時缺少調試信息
- 27. MFL - 信息格式語言
- 28. 該模塊的調試信息中缺少源信息 - PDB已成功加載
- 29. 調試器顯示在用戶休息無用信息
- 30. 如何通過C++代碼低級別調試COM DLL(Firefox插件)方法而無需調試信息?
我不知道,但也許使用'llvm-gcc -g -O0'用'const'編譯C++並查看它產生了什麼? – 2013-05-07 12:31:05
@EliBendersky F#是一種靜態類型語言。 「值」是指F#中的不可變變量。 – Asik 2013-05-08 01:08:10