2013-04-20 74 views
0

我想寫一個函數,它將查找所有局部變量並將其保存到光盤。稍後,我想加載這些變量並調用變量保存的調用函數。目標是加速調試我的代碼中深處的函數。在C++中轉儲局部變量

我在Matlab中使用了類似的技術,它允許保存整個工作空間並稍後加載並繼續。我可以在C++中使用類似/相關的技術嗎?

+0

你想保存什麼,你嘗試過什麼? – 2013-04-20 20:24:47

回答

3

您正在尋找reflector機制。

在C++中沒有任何反射器工具來枚舉變量,所以你不能像Matlab那樣做。

您應該創建一個數據結構並在代碼中手動添加變量。然後做你想做的。

在實踐程序員將使用以下步驟:

拯救:

  • 打開文件
  • 變量1,變量2的值寫入,...到文件
  • 關閉文件

加載:

  • 打開文件
  • 讀取變量1,變量2,...從文件,並將其儲存到相應的變量
  • 關閉文件
+0

我明白了。將堆棧中的內存塊與本地變量相對應是否可以保存? – Ekalic 2013-04-20 20:32:40

+0

如果您知道該塊在運行時的地址,那麼您可以將它寫入一個文件的字節序列,但我不確定它會幫助您進行調試。 – deepmax 2013-04-20 20:39:04

+0

聽起來像你想要生成一個核心轉儲並在調試器中打開它。如果沒有更多的上下文和伴隨的源代碼和目標代碼來解釋它,獲取堆棧狀態可能不會太有用。 – 2013-04-22 02:20:08

0

怎麼樣的通話記錄?那麼寄存器中的值呢?你想在功能的第一行或其他行恢復。

您可以嘗試編寫堆棧,但只有在沒有變量具有構造函數或指向malloc內存的指針時纔有效。

您可以使用setjmp()獲取寄存器和longjmp()中的所有值來恢復它們。

如果您在Windows上,可以查看DbgHelp API。它可能有枚舉所有局部變量的方法。