2009-10-28 33 views

回答

3

要調試一個C++程序,必須在DLL中保存很多額外的信息,這樣調試器才能在運行時找到代碼。與C#不同,C++沒有運行時間要求,無法檢查代碼,因爲它允許進行廣泛的運行時檢查,也稱爲反射。無論是使用調試模式還是釋放模式,C#中都有這些信息。

此外C++通常直接編譯到機器代碼在發佈模式編譯器的目標是儘可能優化代碼,例如。刪除任何和所有無關的信息和代碼。在C#中,編譯器編譯爲一個僞代碼,該代碼正好按照需要進行編譯。此代碼保留了大部分調試所需的內容,而不管它是否是正在構建的發行版或調試版。這樣可以編寫一個反編譯器,從運行時程序集返回代碼。

1

也許是因爲在.Net中,它是處理所有調試檢查的運行時引擎,而在CPP中,所有檢查都被編譯到DLL中。

1

.Net DLL包含支持運行時反射,類型安全和代碼訪問安全性的元數據。 PDB中唯一的東西是局部變量名稱和行號。

因爲在C++中需要注入額外的元數據並且有時不需要注入以支持調試。

0

你的意思是C#不是.NET。也取決於你的項目。

我有一個C++/CLI DLL,它是54K的版本和94K的調試版本,
,另一個版本是88KB,調試版本是124KB。

包含MFC的C++/CLI EXE在發佈時爲471KB,在調試時爲4446KB!

然後我的C#DLL在調試和發佈中都是135KB。