Debugging 空程序分段错误

Debugging 空程序分段错误,debugging,haskell,segmentation-fault,Debugging,Haskell,Segmentation Fault,我有一个空的程序(modulemain,其中Main=return()),如果我在cabal文件中包含一个特定的库,该程序就会发生故障 这个库是我自己的,segfault是bumblebee驱动程序与opengl和haskell之间的某种交互(segfault只在我optirun与其他程序一起工作时发生,在堆栈跟踪中我只看到libGL.so),但这不是我的问题 我的问题是,一个没有代码的程序怎么可能出现segfault?更准确地说,我的库中有哪些代码仅仅因为它在构建中而运行取决于它?我如何调试这

我有一个空的程序(
modulemain,其中Main=return()
),如果我在cabal文件中包含一个特定的库,该程序就会发生故障

这个库是我自己的,segfault是bumblebee驱动程序与opengl和haskell之间的某种交互(segfault只在我
optirun
与其他程序一起工作时发生,在堆栈跟踪中我只看到libGL.so),但这不是我的问题

我的问题是,一个没有代码的程序怎么可能出现segfault?更准确地说,我的库中有哪些代码仅仅因为它在构建中而运行取决于它?我如何调试这些废话


编辑。如果在编译库时更改额外库的列出顺序,问题就会消失。具体来说,我将GL、GLEW移到sfml-*之前。但问题依然存在除了漫无目的地摆弄构建文件之外,我怎么会发现这一点呢?

在平淡的GCC编译中,我注意到linux下75%的段错误是定义返回类型的方法,在代码流中没有返回类型

我想说的是,当不确定的东西突然存在时,要真正意识到回报,然后给出未使用的名义价值。。。不是“零牌”或花式玩偶,只是游戏中的一些东西

如果你的进步是不酷的,你可以删除或修改它们


您的消息中没有足够的细节来理解您的上下文,但是如果您可以运行pdb,GCC编译时会添加大量调试信息以提供帮助。在它崩溃后,会有frame和bt(backtrace)等命令来帮助您。

最明显的候选者是库中的静态初始值设定项或它链接的对象-您对此进行了调查吗?@GaneshSittampalam,听起来不错,但我的代码没有,除非ghc生成了一些。我确实使用多个外部库。我将如何检查它们?这两种方法将是(a)获取每个库的代码并检查它,(b)删除外部库的列表,以隔离哪一个触发问题。或者在调试器中运行它,并查看它在哪里崩溃。我从未使用过Haskell,但我认为它必须支持调试?它不一定会告诉您如何解决它。但这通常是解决问题的第一步。不知道为什么订单会起作用。我能想到的唯一合理解释是多个库定义了相同的符号。