如何调试由c#应用程序调用的DLL(c代码)

时间:2011-02-18 20:15:16

标签: c# windows debugging dll

您好我一直在研究调用dll函数的c#应用程序。 dll是c代码,它实际上初始化套接字以读/写/操作数据。 dll是用调试信息编译的。问题是在某些情况下,c#应用程序会在dll中弹出一条消息,说明MemoryAccessViolation,但不会显示任何更多信息。我基本上是一个Linux开发人员,所以我想知道调试这些问题的任何机制。

4 个答案:

答案 0 :(得分:2)

在项目属性的Visual Studio中,您可以通过单击Debug选项卡启用非托管代码的调试,然后选择该选项(启用非托管代码调试)。此外,通过按<ctrl><alt>e(或在“调试”菜单下选择该选项)来调出异常对话框,可以告诉调试器在非托管代码中发生异常时停止。

答案 1 :(得分:1)

在“调试”选项卡中,设置非托管调试。

如果这没有帮助,使用WinDbg调试它可能是最快的,它应该在内存访问冲突时暂停执行。

问题在于违规行为可能是早期发生的行为的结果。

答案 2 :(得分:0)

可能有更好的答案,但我采取的一般路线是:

  1. 尝试并按需要导致异常。换句话说,确定导致错误的确切条件。这可能需要一些时间。

  2. 尝试在C#代码中发生异常时捕获异常。如果幸运的话,至少可以引导您完成在#1中重复问题所需的步骤。

  3. 如果我有权更改用c写的dll;添加大量日志记录。希望你至少知道这是从哪里来的。

答案 3 :(得分:0)

这是一篇论坛帖子,其中包含一些提示: http://social.msdn.microsoft.com/Forums/en/netfxcompact/thread/69e84750-6636-4656-bbd4-8d3586290af3

  

使用VS调试器照常启动托管代码。现在,您需要启动VS的第二个副本并将其附加到您正在调试的进程。为第二个调试器实例选择本机代码。现在假设已经加载了DLL(已经执行了该DLL的任何内容),您应该能够设置一个断点。

     

有时在本机DLL中显示消息框会有所帮助,因此执行会在您感兴趣的位置停止,您可以附加本机调试器并继续。