如何解决如何使用Visual Studio跨调用C ++ dll的C#程序进行调试?
我正在Visual Studio 2019中编写一个C#应用程序,该应用程序调用C ++ dll(以处理某些CUDA编程),但我无法调试代码的两个部分。调试器在C#项目中运行良好,但是即使它们都在同一解决方案中运行并且都设置为DEBUG,也不会在C ++项目中加载符号。
需要明确的是,这不是调试CUDA代码的问题。
有什么想法可以继续吗?
我不确定是否相关,但这是我正在使用的测试代码...
C#
[DllImport("HoughTest.dll",CallingConvention = CallingConvention.Cdecl)]
public static extern float sumArray([MarshalAs(UnmanagedType.LPArray)] float[] x,int n);
private void button_Click(object sender,EventArgs e)
{
// break points placed in this routine do trigger
float[] x = new float[] { 0.5f,1,2,3 };
float sum = sumArray(x,x.Length);
MessageBox.Show("Sum is "+sum);
}
C ++
extern "C" __declspec(dllexport) float sumArray(float* x,int n)
{
// break points placed in this routine do not trigger
float sum = 0;
for (int i = 0; i < n; i++)
{
sum += x[i];
}
return sum;
}
解决方法
如何使用Visual Studio在调用C ++的C#程序中进行调试 dll?
只需为您添加一个答案,并感谢所有社区成员的帮助。
要在托管项目中调试本机C ++代码,到目前为止,实际上它可以在Visual Studio上完成。您可以查看此正式文档-Debug C# and C++ in the same debugging session。
建议
1)首先,在构建本机c ++ dll项目之前,应确保平台与c#托管项目相同。
例如,C ++项目为X64
,您应确保托管项目也使用x64
。
此外,右键单击c ++项目-> 属性-> 调试->设置调试器类型到Auto
或Mixed
。
2)其次,在构建c ++项目以生成dll时,应将c ++ dll
及其pdb
文件都复制到托管项目中。
换句话说,当您使用dllimport引用c ++ DLL时,必须确保dll
和pdb
都存在于该路径中。>
3)调试C#项目时,应在托管项目属性-> 调试下选中选项enable native code debugging
>。
=========================
如果仍然没有找到断点,则应尝试禁用工具-> 选项-下的启用我的代码选项-> 调试-> 常规。
此外,您也可以参考this similar issue以获得更多帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。