用户
 找回密码
 立即注册
yishanchao 该用户已被删除
发表于 2013-8-20 15:49:25
77644
我用cuda生成了dll,然后用c#调用这个dll,但是没法调试啊,设置断点后进不到dll的函数里面去。
用.cpp就可以,难道是.cu不支持?
求大神解释!
使用道具 举报 回复
发表于 2013-8-20 15:59:51
楼主您好,请确定您的C#项目进行了如下设置:
(1)在您的C#项目的属性页面的debug页面里,确保选中了“enabled unmanged code debugging"
(2)请确保您在VS的debug菜单的选项中没有选中“enable just my code"
(3)请确保您的cuda项目和您的C#项目是在同一个solution下。
(4)请确保您的C#代码中的该dll项目中的函数的签名是正确的(请仔细检查[dllimport]行)

这样一般是无问题的,我常年使用C#, 可以调试。
当然,您也可以在您的CPP项目中调试正确,然后给C#项目用。

感谢来访。
使用道具 举报 回复 支持 反对
发表于 2013-8-24 15:39:27
横扫千军 发表于 2013-8-20 15:59
楼主您好,请确定您的C#项目进行了如下设置:
(1)在您的C#项目的属性页面的debug页面里,确保选中了“ena ...

版主,照您说的修改后出现了新的问题。
“System.BadImageFormatException”类型的未经处理的异常出现在 csharp_control2010.exe 中。

其他信息: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

上网查资料说是操作系统的问题,可我都设置了啊,问题还是解决不了,求指教!
ps:我的cuda是5.0的,操作系统x64,vs2010。我使用.cpp调用.cu的,如果删除.cu文件就不会出现错误。
使用道具 举报 回复 支持 反对
发表于 2013-8-24 17:40:03
yishanchao 发表于 2013-8-24 15:39
版主,照您说的修改后出现了新的问题。
“System.BadImageFormatException”类型的未经处理的异常出现在  ...

楼主您好,

C#项目您看下是否被配置成了“Any CPU"了。
此时将自动适配您的CPU的(64-bit)
但是您的native dll(cuda dll项目), 无法自动从32位变成64位,
因此将导致managed/unmanaged互操作失败。

请将贵solution中的c#和cuda dll项目修改成同样的平台配置。
举个例子:
将他们均设置成x86, 而不要使用任何自动平台选项。
使用道具 举报 回复 支持 反对
发表于 2013-8-28 19:18:15
横扫千军 发表于 2013-8-24 17:40
楼主您好,

C#项目您看下是否被配置成了“Any CPU"了。

嗯,解决了,果然还是x64和x86的兼容问题,我之前已经将cuda和c#都设置为x64了,原来是我引用了一个另外的x86的dll,改成x64就没有问题了。谢谢版主。
ps:这几天网络除了点故障,查看的有点晚了。。。
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册