我已经下载了一个名为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,清理文件夹,大声亵渎,并用拳头砸桌子。全部无济于事。
环境:
答案 0 :(得分:1)
我将其发布为问答式答案,因为google和SO都让我失望了。但是,既然我找到了答案,我就将其发布,希望对下一个家伙有所帮助。
事实证明,此技巧是在所涉及的库的assembly.cs文件中。它包含以下行:
[assembly: System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
我已经阅读了该属性的docs,但是我仍然不太明白它的作用。我也不明白为什么项目觉得需要添加它。
我不知道这些问题的答案。但是目前,我不需要。注释掉这一行后,便可以再次设置断点,并且调用断点的代码可以继续运行,这是我所需要的。
如果有人可以发光,我会很感兴趣。但是与此同时,如果其他人遇到了这种情况,现在您可以找个地方看看。