在调试红宝石malloc的错误在Mac OS X(Debugging malloc errors i

2019-09-17 20:23发布

我想这样我得到在运行一些Ruby脚本以下调试错误:

ruby(47333,0x7fff72aee960) malloc: *** error for object 0x7f98b6a6e3f0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

任何想法我怎么能实际设置这样的断点和调试? 我想看看这是否是由红宝石本身或一些extensio造成的..

我使用Mac OS X 10.7.3 (Lion)ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]

Answer 1:

如果你有关于Ruby 1.9.2+,安装调试器宝石( gem install debugger )。 有两种方法调试:直接包括debugger宝石或使用redbug二进制文件。 让我们假设我们有一个玩具脚本,我们想知道为什么$blah调用后4 foo()假装这是一个外部库)。

方法1:包括debugger

这是在你的代码中手工设置断点:

require 'debugger'

$blah = 3

def foo
  $blah += 1
end

def bar
  $blah += 4
end

foo()
debugger() # opens rdb
bar()

puts $blah

运行此作为ruby debug.rb 。 这将启动你进入一个红宝石调试控制台:

% ruby debug.rb
debug.rb:15
bar()
(rdb:1) list
[10, 19] in debug.rb
   10    $blah += 4
   11  end
   12  
   13  foo()
   14  debugger()
=> 15  bar()
   16  
   17  puts $blah
(rdb:1) display $blah
1: $blah = 4

方法2:运行rdebug

下面是我们的示例脚本示例, debug.rb

$blah = 3

def foo
  $blah += 1
end

def bar
  $blah += 4
end

foo()
bar()

puts $blah

从shell执行rdebug debug.rb 。 下面是一个例子会话:

% rdebug debug.rb
(rdb:1) list 1,20
[1, 20] in /mnt/hgfs/src/stackoverflow/debug.rb
=> 1  $blah = 3
   2  
   3  def foo
   4    $blah += 1
   5  end
   6  
   7  def bar
   8    $blah += 4
   9  end
   10  
   11  foo()
   12  bar()
   13  
   14  puts $blah
(rdb:1) break 12
Breakpoint 1 file /mnt/hgfs/src/stackoverflow/debug.rb, line 12
(rdb:1) display $blah
1: $blah = 
(rdb:1) continue
Breakpoint 1 at /mnt/hgfs/src/stackoverflow/debug.rb:12
1: $blah = 4
/mnt/hgfs/src/stackoverflow/debug.rb:12
bar()
(rdb:1) display $blah
2: $blah = 4

关键的命令是break LINE-NUMBER ,并display VARIABLE 。 希望帮助!

资源

  • 红宝石调试文档
  • 调试宝石


Answer 2:

下面是当我看到OP的消息有什么解决我的问题:

我得到的消息,因为我曾与路径混乱,试图让rvmgem安装的东西,我想办法真的弄脏我的权限。 然后我得到了OP报告这种相同的消息。 对我来说,做的唯一的事情是去到Mac OS X的Disk Utility ,选择我的左窗格中(在Macintosh HD)卷,然后单击Repair Disk Permissions

它完成后,我是能够成功地打开并启动一个新的终端窗口。



文章来源: Debugging malloc errors in Ruby on Mac OS X