8

我正在尝试调试运行一些 Ruby 脚本时遇到的以下错误:

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

知道如何实际设置这样的断点并进行调试吗?我想看看这是由 Ruby 本身还是某些扩展引起的..

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

4

2 回答 2

2

当我看到 OP 的消息时,这就是解决我的问题的方法:

我收到消息是因为我弄乱了路径,试图获取rvmgem安装某些东西,并且我设法真正弄乱了我的权限。然后我收到了 OP 报告的相同消息。对我来说,唯一要做的就是转到 Mac OS X 的Disk Utility,在左窗格(Macintosh HD)中选择我的卷,然后单击Repair Disk Permissions

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

于 2013-09-17T07:32:23.963 回答
2

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

方法一:包括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​​ 调试控制台:

% 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

从外壳,执行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-NUMBERdisplay VARIABLE。希望有帮助!

资源

于 2012-06-07T22:25:56.213 回答