【问题标题】:crash on 64bt platform在 64bt 平台上崩溃
【发布时间】:2011-07-07 05:57:28
【问题描述】:

我想我在这里找到了一个类似的线程,但不幸的是我不太了解它,因为这与 c++ 有关。当我试图增加一些东西时,我的问题似乎也发生了。 Incrementing `static int` causes SIGSEGV SEGV_ACCERR

看了上面的链接后,(我感觉它们很相似) 分段错误似乎并不总是发生,这种情况非常罕见。转储似乎发生在此函数中以及调用 find 时。

【问题讨论】:

  • Static int 不是您链接到的问题中的真正问题,我怀疑它也不适合您。问题可能出在您的查找功能中。您可能希望使用像 valgrind 这样的内存调试器。
  • @Eelke - IA-64 上没有 valgrind。 wdb 用于此目的。
  • @skwllsp,感谢您发现,我的手指输入了错误的名称...
  • @Rahul,你能在gdb下运行你的程序吗?还是用gdb下的bt命令分析一个core文件?
  • 你能尝试在x86或x86_64上编译程序并在valgrind下运行吗?

标签: c++ itanium


【解决方案1】:

似乎你试图给 HashTbl::find key 0。它试图取消引用它并失败。将打印key 添加到 std::out 并检查您正在使用什么键。

【讨论】:

  • 好吧,我想有点矛盾..正如我所说,核心文件似乎没有打印正确的值。所以我不认为键值是0。除此之外,你能告诉我,键值如何变为零吗?因为我看不到 key 变为零的可能性,所以 key == objectStatName。那么你能想到一个 key 可以变为零的场景吗?我认为如果你能从中得出一个理论,那将是非常有帮助的。如果 key 为零,那么 bt 会更进一步,并在它没有的哈希调用中转储..
  • 好吧,你说得对。对了,你是不是分析了core文件,还是在gdb下运行了程序?
  • 我能找到运行 wdb 的程序吗? wdb如何在这里提供帮助。这主要是针对诸如内存泄漏之类的问题,对吗?我不确定这里是不是这样。
  • 对不起,没听懂你的意思。你的程序是在 gdb 下运行的吗?
  • mm_api_signal_recovery(), mm_set_signal_alarm() - 是你的信号处理器吗?
猜你喜欢
  • 1970-01-01
  • 2013-05-01
  • 2011-08-26
  • 2023-03-23
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多