是否有可能在堆棧上「偷看」足以推斷,或許通過將地址映射到調試.map文件或其他東西,調用函數是以編程方式執行的?C++在堆棧上查看調用者信息
我有一個從大量不同的地方調用的函數,基本上如果可能的話我希望能夠以編程方式註銷誰調用函數,以便隨着時間的推移跟蹤參數值的進展,以及能夠將他們連接回他們可能出錯的地方。我可以添加一個參數,以便調用者必須提供一個用戶字符串或其他東西,但是如果可能的話,我想要做一些不太乾擾的事情。
是否有可能在堆棧上「偷看」足以推斷,或許通過將地址映射到調試.map文件或其他東西,調用函數是以編程方式執行的?C++在堆棧上查看調用者信息
我有一個從大量不同的地方調用的函數,基本上如果可能的話我希望能夠以編程方式註銷誰調用函數,以便隨着時間的推移跟蹤參數值的進展,以及能夠將他們連接回他們可能出錯的地方。我可以添加一個參數,以便調用者必須提供一個用戶字符串或其他東西,但是如果可能的話,我想要做一些不太乾擾的事情。
GCC具有此功能,例如__builtin_return_address(請參閱http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html)。它們只能用於調試或特殊測試目的,而不能用作生產代碼的一部分。
你可以generate MiniDump files using windows API並稍後在調試器中加載它們,如果符號可用,你應該能夠調試崩潰並調查變量的值。
您可以添加簡單的堆棧跟蹤代碼:http://ideone.com/wkcTL(頂部是標題,請參閱示例的最後40行) –