2017-04-13 395 views
0

當然,C/C++程序中定義的每個變量的符號和類型信息都是可用的,否則調試器將無法顯示它們。但是如何獲取這些信息?堆棧中局部變量的GCC符號表

關於精靈很多信息是可用的,但畢竟是如何關聯的,似乎堆棧即

在遠程實時系統(未UNIX下)上舉行全球唯一變量,而不是本地的,我我希望能夠通過複製列表中的一些內存以及相關的變量名稱,然後在RT系統繼續時查看它們。

最好的方式是可以隨時爲任何變量引入轉儲,而不需要在代碼中預先添加一些語句。

+0

這將幫助我很多隻是有一個示例程序,打印出一個函數和堆棧中定義的本地結構類型值,擴展字段等。 –

回答

1

但是如何獲取這些信息呢?

TL; DR:它很複雜。

您需要構建幾乎完整的調試器。你可以看this space。當作者轉到第9步時,您將有一個示例要遵循。

我希望能夠通過將列表中的某些內存與相關的變量名一起復制,然後在RT系統繼續時查看它們。

RT系統通常不易於調試。你可能做的最好的做法是拍攝堆棧的整個(使用部分)快照,並在稍後「撈出」變量值。要做到這一點,您需要知道堆棧指針和指令指針的當前值,堆棧的內容以及所有ELF對象的加載地址。而且你需要重新實現大部分調試器(或者修改現有的調試器)。

最簡單的方法可能是將上述信息轉換(後處理)爲ELF core,然後使用您選擇的現有調試器來分析這些值。您可以使用Google user-space coredumper查看涉及的內容。另見this answer