gpt4 book ai didi

ruby - 在 Mac OS X 上调试 Ruby 中的 malloc 错误

转载 作者:数据小太阳 更新时间:2023-10-29 06:54:44 26 4
gpt4 key购买 nike

我正在尝试调试在运行某些 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 本身还是一些 extensio..

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

最佳答案

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

方法一:包含调试器

这是在您的代码中手动设置断点:

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

方法二:运行rdebug

这是我们的示例脚本,debug.rb:

$blah = 3

def foo
$blah += 1
end

def bar
$blah += 4
end

foo()
bar()

puts $blah

从 shell 中,执行 rdebug debug.rb。这是一个示例 session :

% 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。希望对您有所帮助!

资源

关于ruby - 在 Mac OS X 上调试 Ruby 中的 malloc 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10922777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com