2010-06-07 82 views
1

我目前正在一個已經很久的bug的項目,現在我懷疑,除其他事項外,代碼中存在指針錯誤。C++發現指針錯誤

該程序是使用COM以本地C++編寫的,並使用進程外COM服務器。

任何人都可以給我一些提示,作爲如何去尋找這些錯誤?

是否有具體的事情要記住,如何做到這一點,等等...

+0

什麼樣的「指針錯誤」? – jalf 2010-06-07 13:06:15

回答

1

我在這裏有幾個建議:

  1. 你是怎麼知道有指針錯誤的?你爲什麼不把它放在調試器中,然後看看程序崩潰的地方?那將是一個開始。監視有問題的變量。
  2. 是什麼讓你覺得在代碼的COM部分搞砸了?相反,我想有2個進程在這裏運行(可能或不可能在同一臺機器上),你應該並行運行這些進程,然後看看它們是如何相互響應的 - 我確信有些東西會出錯處理應用程序代碼中的數據。 COM是一項相當成熟的技術。
  3. 也許你正在進行不正確的API調用,或者像所有的事情微軟有1000個參數一樣,你可能需要在那裏調整。

希望這會有所幫助。你也可以嘗試諸如遠程調試等等,或者用Vtune或其他東西來測試代碼,但是讓我們在開始時保持簡單。

Arpan

0

這是一個非常廣泛的主題。

你可以做的最好的事情就是使用一個工具和跟蹤平臺,它允許你查看所有的分配,內存泄漏和內存損壞,但是這可能非常難以設置和耗時,這取決於你的大小項目和你的構建系統的複雜性。

你也可以插件自定義的分配和釋放碼(看看微軟的DEBUG_NEW(我認爲)的一個例子。

對於特定的COM-跟蹤我不知道是否有任何已有的解決方案。如果你可以使用自己的ATL插件/替換/擴展智能指針類(如CComPtr)

1

你可以嘗試使用像AQTime,DevPartner或IBM Rational Purify這樣的內存分析器。其他

1

BoundsChecker有一個名爲Wait for Process的運行模式。這使您可以讓BC等待,直到您的DLLHOST進程啓動並在進程啓動時連接BC核心。對於指針錯誤,您可以使用BC的最終檢查模式。這意味着你添加編譯時本地儀器,如果你測試整個應用程序,這可能會令人生厭,但如果你只是測試你的COM服務器及其依賴關係,那麼它可以非常有效。 MF Developer下的http://www.microfocus.com有關DPS 10.5在2月初發布的消息。免責聲明,我在DevPartner團隊工作,所以認爲這是我無恥的插件。我們對10.5版本及其64位支持的意圖是確保我們可以處理純粹的C++ x64應用程序,其次是混合的.NET應用程序,以及純粹的.NET應用程序可以在BC之前處理。該套件中的其他配置文件以另一種方式發展,純.NET最重要。希望您找到10.5適合您的開發環境和故障排除需求。