簡體   English   中英

擴展功能(又名修改)visual studio C / C ++編譯器

[英]Extending functionalitty (aka Modifying) visual studio C/C++ compiler

我想擴展Visual Studio中使用的C / C ++編譯器的功能。 基本上,我想編寫一個工具來解析c / c ++代碼並打印出所有分支(如果check,break語句,for / while循環等)在代碼中發生的位置。 然后,我想在執行代碼時使用此信息,以便為給定的測試用例顯示未執行的代碼區域。

可能嗎? Microsoft是否提供了向其編譯器/調試器添加功能的任何方法?

- 謝謝

微軟的編譯器總是一個黑盒子。 (取自即將推出的鏈接中的自己網站)。 所以你有可能現在不可能。 但隨着項目Roslyn即將改變。

無論如何,在我看來你不應該看看編譯器,而是Visual Studio的調試部分。 有些API允許您與調試器進行交互,這可能是您想要采取的道路(其他人確實采取了這種做法)。

您通常不會通過修改編譯器來執行此操作,並且在任何情況下都不能使用Microsoft的編譯器。 相反,您將編寫一個預處理器來檢測代碼(在條件節點處插入額外的代碼以跟蹤控制流),然后編寫一個處理跟蹤數據以確定運行的工具。

Visual Studio本身具有一個加載項體系結構 ,允許您以您描述的方式在編輯器中呈現此數據。

檢測本身並不簡單 - 它需要能夠解析所有有效的C和C ++代碼,並能夠保留原始行號信息,以便可以顯示未經檢測的代碼。 為了完整性,它必須能夠使用三元?:運算符對代碼進行重新分解,以便可以檢測其流程。 檢測代碼也需要是標准預處理器而不是原始源代碼輸出的代碼 - 使行號跟蹤更加困難(盡管預處理器已經管理了與調試器一起使用的代碼)。

使用預處理器來檢測代碼。 代碼應該在運行時吐出文件。 在斷點處,使用調試器API + visual studio addin機制處理此信息和“灰顯”代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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