嗨,我一直在致力於調用dll函數的c#應用程序。 DLL是C代碼,它實際上初始化套接字來讀/寫/操作數據。使用調試信息編譯dll。問題是在某些情況下,c#應用程序會彈出一條消息,說明DLL中的MemoryAccessViolation,但不會顯示任何更多信息。我基本上是一個Linux開發人員,所以我想知道任何機制來調試這樣的問題。如何調試由c#應用程序調用的dll(c代碼)
0
A
回答
0
可能有更好的答案,但我會採取一般的路線將是:
嘗試,並得到它導致對需求的例外。換句話說,確定哪些確切的條件會導致錯誤。這可能需要一些時間。
在C#代碼中發生的地方嘗試並捕獲異常。如果你幸運的話,那麼這至少可以引導你在#1重複這個問題所需的步驟。
如果我有權限修改用c寫的dll;添加大量日誌記錄。希望你至少知道這是從哪裏來的。
2
在Visual Studio中的項目屬性,您可以通過點擊Debug
選項卡上啓用非託管代碼調試,並選擇該選項(啓用非託管代碼調試)。另外,通過按<ctrl><alt>e
(或在Debug菜單下選擇該選項)調出異常對話框,可以讓調試器在非託管代碼發生異常時停止。
0
這裏是一個論壇的帖子有一些提示: http://social.msdn.microsoft.com/Forums/en/netfxcompact/thread/69e84750-6636-4656-bbd4-8d3586290af3
使用VS調試啓動託管代碼如常。現在您需要啓動VS的第二個副本並將其附加到您正在調試的進程中。爲第二個調試器實例選擇本機代碼。現在假設DLL已經被加載(任何已經執行的DLL),你應該可以設置一個斷點。
有時它有助於在本地DLL中顯示消息框,因此執行將停止在您感興趣的位置,您可以附加本地調試器並繼續。
1
在調試選項卡中,設置非託管調試。
如果這沒有幫助,用WinDbg調試它可能是最快的,它應該停止對內存訪問衝突的執行權。
問題是違規行爲可能是發生得更早的行爲的結果。
相關問題
- 1. 從C#應用程序調用C++ DLL
- 2. 如何調試C++ dll調用C++ DllImport
- 3. 調用C#的.dll ++代碼
- 4. 如何調試C++ dll的ctypes調用?
- 5. 調試C#應用程序
- 6. 調試c#應用程序
- 7. 從Java應用程序調用C#dll
- 8. 如何從C#窗口應用程序項目調用C++ dll
- 9. 如何從C++/CLI應用程序調用C#.dll?
- 10. 從C#調用C dll代碼?
- 11. 調用Visual C++ DLL而不調用應用程序/ Host Exe源代碼
- 12. 從C#應用程序調試C .dll文件
- 13. 如何在調試時從C#應用程序進入C/C++ DLL
- 14. 從C++應用程序代碼調用Linux系統調用?
- 15. 從C#程序調用一個C DLL
- 16. 如何從C代碼調用C#DLL中的方法?
- 17. 如何通過c#代碼調用安裝應用程序?
- 18. 調試MFC程序使用fprintf調用C DLL
- 19. C#應用程序到C + + dll回到C#應用程序通過回調
- 20. 用C語言調試dll
- 21. 從C#代碼調用delphi DLL方法
- 22. 從C#調用delphi DLL函數代碼
- 23. 如何從C#應用程序調用COM-DLL?
- 24. 如何調試用cgo調用的C代碼?
- 25. 調試C++代碼
- 26. C#項目使用的C++ DLL調試
- 27. 在C#代碼中調用C++ dll代碼
- 28. 如何在從Visual Studio 2008中的C#應用程序調用時調試C DLL
- 29. 如何調試C程序
- 30. 如何調用從C#應用程序