【发布时间】:2014-07-29 19:24:33
【问题描述】:
我有一个空程序 (module Main where main = return ()),如果我在 cabal 文件中的 build-depends 中包含特定库,则会出现段错误。
库是我自己的,段错误是大黄蜂驱动程序与 opengl 和 haskell 的某种交互(段错误仅在我 optirun 与堆栈中的其他程序一起使用时发生trace 我只看到 libGL.so),但这不是我的问题。
我的问题是,没有代码段错误的程序怎么可能?更准确地说,我的库的哪些代码运行只是因为它在构建依赖中?如何调试这种废话?
编辑。如果我更改列出额外库的顺序,在编译我的库时,问题就会消失。具体来说,我在 sfml-* 之前移动了 GL、GLEW。不过,问题仍然存在。 除了漫不经心地摆弄构建文件之外,我怎么会发现这个?
【问题讨论】:
-
最明显的候选者是你的库中的静态初始化器或它链接的东西——你调查过吗?
-
@GaneshSittampalam,听起来不错,但我的代码没有,除非 ghc 生成了一些。我确实使用了多个外部库。我将如何检查它们?
-
我考虑的两种方法是 (a) 获取每个库的代码并检查它,以及 (b) 减少外部库的列表以隔离哪个库触发了问题。
-
或者在调试器中运行它,看看它在哪里崩溃。我没用过Haskell,但我觉得它一定支持调试?
-
它不一定会告诉你如何解决它。但这通常是定位问题的良好第一步。不知道为什么订单会有所不同。我能想到的唯一合理的解释是多个库定义了相同的符号。
标签: debugging haskell segmentation-fault