代码之家  ›  专栏  ›  技术社区  ›  David Wohlferd

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

  •  1
  • David Wohlferd  · 技术社区  · 6 年前

    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.
    

    我试过重建,清理文件夹,大喊脏话,用拳头砸桌子。一切都无济于事。

    环境:

    • Windows 7 x64
    • Visual Studio 2017(15.8.0第5页)
    • 框架4.7.2
    1 回复  |  直到 6 年前
        1
  •  1
  •   David Wohlferd    6 年前

    我把这个作为一个问答,因为谷歌和我都不喜欢这个。但现在我找到了答案,我把它贴出来,希望它能帮助下一个男人。

    结果发现,技巧出现在相关库的assembly.cs文件中。它包含以下行:

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

    我读过 docs 但我还是不太明白它的作用。我也不明白为什么这个项目觉得需要添加它。

    • 有什么功能上的原因吗?事情似乎没有它,但也许有一些模糊的功能,需要它?
    • 这是吗 想象上的 可调试,但不是由于VS或clr中的错误?
    • 此项目旨在支持多个环境。也许其他平台需要它?

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