bgc*_*ode 8 ruby debugging malloc macos
我正在尝试调试运行一些Ruby脚本时遇到的以下错误:
ruby(47333,0x7fff72aee960) malloc: *** error for object 0x7f98b6a6e3f0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Run Code Online (Sandbox Code Playgroud)
知道如何实际设置这样的断点和调试吗?我想知道这是由Ruby本身还是一些扩展引起的.
我正在使用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)。有两种调试方法:直接包含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
Run Code Online (Sandbox Code Playgroud)
将其运行为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
Run Code Online (Sandbox Code Playgroud)
rdebug这是我们的示例脚本debug.rb:
$blah = 3
def foo
$blah += 1
end
def bar
$blah += 4
end
foo()
bar()
puts $blah
Run Code Online (Sandbox Code Playgroud)
从 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
Run Code Online (Sandbox Code Playgroud)
主要命令是break LINE-NUMBER和display VARIABLE。希望有帮助!
| 归档时间: |
|
| 查看次数: |
1781 次 |
| 最近记录: |