为什么我不能在CudaFy库的c#代码中设置断点?

时间:2018-08-16 06:47:58

标签: c# debugging visual-studio-2017 clr

我已经下载了一个名为CudaFy的开源库,并且已经使用了一段时间。该项目似乎已被放弃,因此当我遇到问题时,我可以自己解决问题。通常这不是问题,但是项目中的一个c#库拒绝让我设置断点,这使调试变得非常困难。

如果我尝试在运行应用程序之前设置断点,则会添加红点,但是一旦我运行该应用程序,圆圈就会被挖空,并且永远不会重新启用。我知道要在其中设置断点的代码正在执行,因为我可以将其更改为显示的内容(例如,throw new Exception("foo"))。

在VS输出窗口中,我看到:

'Opt.exe' (CLR v4.0.30319: Opt.exe): Loaded 'C:\vss\cudafy2\Opt\bin\x64\Debug\CUDA.NET.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
Symbols for the module 'CUDA.NET.dll' were not loaded.

很明显,这是一个线索。但是,查看项目设置时,肯定不是在进行优化。我打开和关闭了优化功能,然后重新关闭,我一直在摆弄CSPROJ文件,但没有帮助。

我尝试过RebuildAll,清理文件夹,大声亵渎,并用拳头砸桌子。全部无济于事。

环境:

  • Windows 7 x64
  • Visual Studio 2017(15.8.0 P5)
  • 构建调试/ x64
  • 框架4.7.2

1 个答案:

答案 0 :(得分:1)

我将其发布为问答式答案,因为google和SO都让我失望了。但是,既然我找到了答案,我就将其发布,希望对下一个家伙有所帮助。

事实证明,此技巧是在所涉及的库的assembly.cs文件中。它包含以下行:

[assembly: System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]

我已经阅读了该属性的docs,但是我仍然不太明白它的作用。我也不明白为什么项目觉得需要添加它。

  • 是否存在某些功能上的原因?一切似乎都没有它,但是也许有一些晦涩的功能需要它?
  • 有人只是试图使自己的代码不可辨认吗?
  • 应该是否可调试,但不是由于VS或clr中的错误引起的?
  • 该项目旨在支持多种环境。也许其他平台需要它吗?

我不知道这些问题的答案。但是目前,我不需要。注释掉这一行后,便可以再次设置断点,并且调用断点的代码可以继续运行,这是我所需要的。

如果有人可以发光,我会很感兴趣。但是与此同时,如果其他人遇到了这种情况,现在您可以找个地方看看。