【发布时间】:2020-12-04 11:07:00
【问题描述】:
我正在 Visual Studio 2019 中编写一个 C# 应用程序,该应用程序调用一个 C++ dll(以处理一些 CUDA 编程),但我无法调试代码的两个部分。调试器在 C# 项目中工作正常,但没有在 C++ 项目中加载符号,即使它们都在同一个解决方案中运行并且都设置为 DEBUG。
需要明确的是,这不是调试 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++ dll 之一。然后使用 attach 来处理,让它在编辑器中的 C++ 断点处中断。
-
您确定本地符号路径设置正确吗?
-
项目 > 属性 > 调试选项卡,勾选“启用本机代码调试”。您无法从托管代码单步执行本机代码,因此请在 C++ 函数上设置断点。如果该断点仍然是空的,则使用工具 > 选项 > 调试 > 常规,取消选中“仅我的代码”。
-
谢谢汉斯 - 做得很好!
-
嗯,这些选项是折衷的……因为它会影响断点、跟踪、编辑和继续以及在异常时停止。据我所知,不可能同时拥有两种语言的所有调试功能。
标签: c# c++ visual-studio debugging visual-studio-2019