2011-09-19 81 views
2

我有一个老的DLL写在Visual Studio 6中,我从C#写的Visual Studio 2010中调用。该DLL工作不正常,我想调试到它。我怎样才能做到这一点?我有源代码项目,但看不到我可以如何进入它。调试从C#调用VC++ 6 DLL#

注意:当我说“不起作用”时,对DLL的调用会成功,并且会在失败之前通过DLL中的代码获得一些方法,但我想要精确地追踪到哪里。

+0

你已经试过了什么?例如,你有没有试过将VS6附加到调试? –

+0

我已经尝试将VC6调试器附加到C#应用程序,但该进程不显示在生成 - >调试 - >附加到进程 – Jonnster

回答

3

调试DLL的技术在MSDN上描述为here。您需要从Visual Studio 6(即开发DLL的工具)执行此操作,所以术语将发生更改。但原则保持不变。

+0

谢谢。读完这一切后,这一切都回来了。 – Jonnster

2

在.NET进程上附加VS6调试器应该可以工作,只要你有相应的二进制文件和源代码的PDB文件。但是,只能在DLL代码上打破。

如果选中“允许非托管调试”标志,则附加其他VS +应能工作,但调试器可能没有加载符号。 DLL的重新编译将解决最后一个问题。

+0

我已经尝试将vc6调试器提供给.NET进程,但.NET进程(WinForms应用程序)不会显示在列表中。 – Jonnster

+0

尝试将.NET项目平台更改为x86,重新编译它并重做操作。 – Luca

2

打开Visual C++的Dll项目,在需要的地方设置断点。在调试会话的项目属性Debug,Executable中,输入使用此Dll的.NET可执行文件。开始调试(Go)。调用VC++函数时,调试器会中断。使用这种方法,您只能调试非托管VC++代码。

另一种方法是以混合调试模式从.NET客户端开始调试。将VC++项目添加到解决方案并重建它以调试托管代码和非托管代码。