2013-05-31 88 views
2

我使用Visual Studio 2010(編寫C++),並分離出一個#定義函數的調用來異常。已定義的函數有點複雜,我希望能夠通過調試器來查找異常發生的位置。有沒有辦法做到這一點?我可以在#define函數內使用Visual Studio調試器嗎?

關係如下: my.h定義了一個繼承自their.h中聲明的第三方類的類。 their.h中的第三方類包含感興趣的宏,它在另一個頭文件中定義,例如`macro.h'。

回答

2

你需要擴展宏進你的源代碼,然後才能對其進行調試。您可以手動執行,也可以使Visual Studio生成預處理器輸出。 http://msdn.microsoft.com/en-us/library/8z9z0bx6(v=vs.80).aspx描述的過程VS 2005年這樣您就可以創建具有與Visual Studio的預處理器生成的。我的文件替換源新的「調試」項目。這對於任何非平凡的項目,所以我想嘗試手動首先做它,特別是因爲你確定了導致異常的具體宏痛苦,所以你可以嘗試手動擴大隻是一個。您也可以使用這些預處理器生成的.i文件進行交叉引用。
UPD:如果有問題的宏在多個位置時,你可能要找出哪個位置負責例外。在調試器下運行它(我假設你有完整的調試信息生成,如果沒有,你應該),並檢查異常時的調用堆棧。只擴展那個位置。
被警告:在開源社區某些項目是臭名昭著的使用宏的代碼混淆工具(我想保持自己的商業祕密不被反向工程被發現),那麼好的運氣了......

+0

找到了兩層擴展的手動擴展方法,並進一步隔離了這個錯誤。不幸的是,它在第​​三方代碼中,所以我無法修復它。將只需要解決它。謝謝。 –

1

我面對同樣的問題,我很驚訝,VS2017不能在調試過程中解析宏。 Resharper for C/C++是偉大的,因爲它可以擴展宏部分或完全 - 可以展開宏和神交它或重建和調試,然後恢復更改。我很確定有一個可以玩的試用版。

相關問題