2011-12-15 56 views
3

我正在開發一個用於AutoCAD的dll模塊項目,該模塊向環境中添加了一些新功能(如菜單,對象等)。自然地,菜單中的模塊有一些錯誤。調試AutoCAD模塊

問題如下,當我在對話框,菜單項,編輯欄或某些操作過程中看到一些錯誤時,如何在源代碼中找到對應的位置負責?除了普通的調試之外,我應該使用哪些工具?

我在VS2010中使用C++。源代碼有大約500000行,所以需要一段時間才能熟悉它。

回答

4

這裏是我用於C#/ .NET的方法。我不能保證它也適用於C++ dll,但它值得一試。

首先,在您的解決方案Visual Studio的配置文件,將下列行添加到調試|任何CPU配置:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <!-- there should be other options already in here! --> 
    <StartAction>Program</StartAction> 
    <StartProgram>c:\program files\autocad2008\acad.exe</StartProgram> 
</PropertyGroup> 

我使用AutoCAD 2008 - 替代路徑到您的可執行文件。在Visual Studio中,您應該能夠從配置屏幕設置此選項,但在Express版本中,您需要在記事本或類似編輯器中手動進行此更改。

接下來,確保您提供的任何AutoCAD提供的dll文件的Copy Local屬性設置爲False

在你的代碼中設置你想要的任何斷點。

現在,當你'運行'的DLL應該啓動AutoCAD。

模塊應該運行到第一個斷點 -

使用netload(!發佈版本將無法正常工作確保你選擇了一個調試版本)加載你的DLL在AutoCAD中。

4

Autocad不會爲其二進制文件提供調試信息(pdb文件)。

如果崩潰在你的模塊中,它應該相當容易調試,只要確保你有相應的pdbdll's。通過dll的我也談論arxdbx文件。

如果崩潰發生在AutoCAD模塊中......根據經驗,我99.9%確定源代碼是您的代碼,而不是AutoCAD的代碼。

+0

是否使用AutoCAD?我估計會有98%的機會。他們通常不會檢查參數中的空值,所以請確保您確實沒有任何參數爲空。同上,爭論超出範圍。您需要非常小心地發送給AutoCAD非託管功能,它們可能非常脆弱。沒有太多的嘗試......在那裏。 – 2012-01-14 10:48:46