【发布时间】:2009-06-29 17:23:20
【问题描述】:
我是一名实习生,负责将测试应用程序从 Solaris 移植到 Red Hat。该应用程序是用 Ada 编写的。它在 Unix 端工作得很好。我在 linux 端编译它,但现在它给了我一个段错误。我运行调试器来查看故障所在并得到了这个:
Warning: In non-Ada task, selecting an Ada task.
=> runtime tasking structures have not yet been initialized.
<non-Ada task> with thread id 0b7fe46c0
process received signal "Segmentation fault" [11]
task #1 stopped in _dl_allocate_tls
at 0870b71b: mov edx, [edi] ;edx := [edi]
此段错误发生在进行任何调用或初始化任何内容之前。有人告诉我,ada 中的“任务”在程序的其余部分之前启动,问题可能出在正在运行的任务上。
但这是最重要的。这个程序只是生成一些代码供另一个程序使用。 OTHER 程序在 linux 下编译时给了我同样类型的 seg 错误和同样类型的错误消息。这让我相信可能有一些小的调整可以用来解决所有这些问题,但我只是没有足够的关于 Unix、Linux 和 Ada 的知识来自己解决这个问题。
【问题讨论】:
-
Solaris 和 Linux 机器上的 Ada 版本是什么?
-
你也可以在groups.google.com/group/comp.lang.ada问这个问题
-
当在主程序的第一行之前出现问题时,您通常可以通过(假设您使用 GNAT)在调试器中启动应用程序,立即设置断点来定位问题区域在函数 adainit (b adainit) 上,然后 (r) 运行它。 “adainit”是编译器生成的应用程序初始化函数——它只是调用了许多其他函数——所以你可以通过它来确定究竟是什么初始化实体触发了问题。 (当然要确保您的源代码是使用调试选项编译的:-g)