2

我在調試SolidWorks Enterprise PDM插件時遇到了問題。我不知道EPDM中的插件是如何處理的,但這個問題似乎與Visual Studio有關 - 也許其他人與其他平臺的插件有類似的問題。Visual Studio 2012 Express調試explorer.exe - 沒有發生斷點

添加調試插件(以便使用最新的源代碼): PDM debug addin

在Visual Studio 2010速成有沒有問題 - 殺探險家,啓動它,重視它和: VS2010 debugging successful

我無法通過Visual Studio 2012 Express實現。雖然它看起來是它的調試資源管理器(文件是隻讀的,停止調試按鈕顯示),它沒有命中斷點: VS2012 debugging failure

我在Windows 7 Professional x64上工作。插件是使用.NET 3.5構建的。我已經使用VS2010和VS2012解決方案都有同樣的問題。

我重新啓動explorer.exe,因此加載了最新版本的插件。項目使用啓動動作「explorer.exe」:

<StartAction>Program</StartAction> 
    <StartProgram>$(windir)\explorer.exe</StartProgram> 
    <StartArguments></StartArguments> 

我不知道爲什麼斷點沒有命中,任何幫助非常感謝。

謝謝!

更新1

我查了一下漢斯建議 - 還有其他啓動兩個進程,而是連接到它們沒有造成任何東西。

這指出了一件事 - 當我附加到這些進程時,VisualStudio中有一個信息,斷點不會被擊中,因爲沒有調試符號被加載 - 注意在the third image attached調試符號被加載(紅色圓圈填滿,沒有感嘆號)。

更新2

當我的VisualStudio連接到管理的explorer.exe - 斷點被擊中!

看來,Explorer.exe的是在託管模式下運行只是有時:

它甚至可以在兩種模式下並排運行: explorer.exe in two modes

所以現在的問題是如何給力的VisualStudio在託管模式下啓動explorer.exe?

更新3

它是一個可能的VisualStudio 2012錯誤?

使用VS2010進行調試時,瀏覽器以正常模式啓動,但一旦加載插件被加載,它將切換到託管模式,並且VS2010停止在斷點處。

與VS2012不同 - 當加載插件被加載時,explorer.exe不會被切換到託管模式,因此?(它被連接?)斷點不會被命中。

但是,當VS2012連接到已處於託管模式的explorer.exe時,它會停在斷點處。

UPDATE 4

我已經成功地到達問題的本質 - 與附着VS2012當向其他處理(例如explorer.exe的)「自動確定的代碼的類型調試」選擇」和該進程以本機模式啓動,並在一段時間後加載託管代碼 - 調試程序不會停止在斷點處當進程在附加或附加明確選擇的代碼類型時已處於受管模式(「 Managed(v3.5,v3.0,v2.0)「) - 調試器停在斷點處。

已發佈在connect - 正在等待解決方案。如果您遇到與此更新中所述相同的問題,請投票。

UPDATE 5

我剛剛測試了a simple managed shell extension,所以它不是的SolidWorks Enterprise PDM的 - 有關。我也發佈了a more precise bug連接。

UPDATE 6

截至2013年年初微軟聲稱,它是預期調試器不表現一個設計決策的。第一個連接錯誤報告中的更多細節。

+0

它使殺死並重新啓動資源管理器來調試供應商特定的插件模型非常有意義。改爲啓動供應商的應用程序。聯繫該供應商尋求支持。 –

+0

EPDM安裝爲Windows資源管理器擴展 - 這就是爲什麼我正在調試explorer.exe(它適用於VS2010)。我將驗證是否有其他任何以它開始的進程。 – marchewek

回答

1

當你構建一個.dll(我假設這樣它被加載到資源管理器中)斷點總是有問題(至少在我的經驗中),因爲你無法事先知道文件將被加載到內存中,因此很難添加斷點。

您可能會嘗試在代碼中添加手動breakpoint invocation(即int3)。在C++中,這將是:

asm { 
    int 3; 
} 

在C#there's a method for that

System.Diagnostics.Debugger.Break() 

嘗試添加到你的函數/代碼部分的開頭(別忘了調試模式共同編譯)。

然後,您將開始調試加載.dll文件的應用程序(.exe),並且加載的庫應該觸發一箇中斷點。

+0

添加Debugger.Break();沒有停止VisualStudio – marchewek

+0

非常有用的方法...只是不要忘記在DEBUG模式下編譯。 –

+0

@marchewek你有調試版嗎?你確定你的函數被加載了嗎?你有沒有嘗試過另一個調試器? – Vyktor

相關問題