是否有允許運行時結構內省的C語言工具?在運行時C結構內省
上下文是這樣的: 我有一個響應外部事件的守護進程,並且對於每個事件我們都帶着一個執行上下文結構(「context」)。上下文很大很混亂,並且包含對各種狀態的引用。
事件處理完成後,我希望能夠通過過濾器運行上下文,並且如果它符合某些條件集,請刪除日誌消息以幫助進行調試。但是,因爲我希望將其用於現場調試,所以我不知道在運行時間之前過濾哪些條件是有用的。
我的理想解決方案將允許用戶從本質上寫出一個C風格的布爾表達式並讓程序使用它。喜歡的東西:已被到處濫用
activate_filter context.response_time > 4.2 && context.event.event_type == foo_event
想法到目前爲止,包括:
- 提供了一組有限的,我們知道如何訪問字段。
- 將所有相關的結構包裝在運行時生成自檢工具的某種宏中。
- 編寫一個知道哪裏(版本化)頭文件存在的python腳本,生成C代碼並將其編譯爲一個dll,然後該守護程序將加載並用作過濾器。顯然這種方法有一些額外的安全考慮。
在我開始一些瘋狂的設計鵝追逐之前,有沒有人知道這種事情在野外的例子?我穹頂了一些谷歌搜索,但沒有提出太多。
沒有內置的內省。你可以設計出近似自省的系統(靜態定義的結構來描述其他結構),'sizeof'運算符和''中的'offsetof'宏可以提供幫助。類型編碼是一個完全獨立的bag'o'worms。 –
2015-01-09 21:52:07
你可能會發現[有沒有在循環中打印'struct'成員的方法,而不用C中每個成員的名字?](http://stackoverflow.com/questions/27496245/is-there-a-way-to-print -struct-members-in-a-loop-without-naming-each-member-in -c/27497861#27497861)對你有幫助,否則你可能不會。 – 2015-01-09 21:55:55