如何使用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 ++项目-> 属性-> 调试->设置调试器类型AutoMixed

2)其次,在构建c ++项目以生成dll时,应将c ++ dll及其pdb文件都复制到托管项目中。

换句话说,当您使用dllimport引用c ++ DLL时,必须确保dllpdb都存在于该路径中。>

3)调试C#项目时,应在托管项目属性-> 调试下选中选项enable native code debugging >。

=========================

如果仍然没有找到断点,则应尝试禁用工具-> 选项-下的启用我的代码选项-> 调试-> 常规

此外,您也可以参考this similar issue以获得更多帮助。