我在Ruby中遇到垃圾收集问题,我认为应该是垃圾收集的对象不是垃圾收集.
require 'ruby-mass'
def find_dependencies(_object_id,_mapped = {})
mapped = _mapped
points_to_object = Mass.references(Mass[_object_id])
ids = points_to_object.keys.map{|x| /\#(\d*)/.match(x).captures.first.to_i}
mapped[_object_id] = ids
unmapped = ids - mapped.keys
unmapped.each do |x|
new_deps = find_dependencies(x,mapped)
mapped.merge(new_deps)
end
mapped
end
Run Code Online (Sandbox Code Playgroud)
做一些制作对象的东西,并找到相关的对象ID.GC.start, 然后:
> find_dependencies(144789180)
=> {144789180=>[61895480, 144786340, 147807540],
61895480=>[144789180],
144786340=>[144789180],
147807540=>[144789180]}
Run Code Online (Sandbox Code Playgroud)
看起来这里有一个圆形参考图案,但它们都完全包含在这四个对象中,因此Mark-and-Sweep收集器应该找到并删除它们.
所以,我的find_dependencies_function,Mass gem或Ruby的垃圾收集器都有一个bug.如何缩小范围以找出问题所在并解决此内存泄漏问题?
我正在为音频设备驱动程序(它的软件,但模拟硬件设备)编写OSX内核扩展.
在开发过程中,完全卸载现有的旧版本然后从头开始构建和安装新版本会很方便.但是,如果没有重新启动系统,有时似乎无法进行此操作.
程序本身没有运行,源文件已从/System/Library/Extensions/目录中删除.
但kextstat揭示了一个实例:
$ kextstat | grep 'com.foo.driver.bar'
219 0 0xfff123 0x5000 0x5000 com.foo.driver.bar (0.0.1) <102 5 4 3>
Run Code Online (Sandbox Code Playgroud)
(...含义:)
Index Refs Address Size Wired Name (Version) <Linked Against>
Run Code Online (Sandbox Code Playgroud)
所以我的驱动程序实例有0个参考,但kextunload有时会失败,抱怨现有的实例:
$ sudo kextunload -b com.foo.driver.bar
(kernel) Can't unload kext com.foo.driver.bar; classes have instances:
(kernel) Kext com.foo.driver.bar class FooBarDriver has 1 instance.
(kernel) Kext com.foo.driver.bar class com_foo_driver_bar has 1 instance.
Failed to unload com.foo.driver.bar - (libkern/kext) kext is in use or retained (cannot unload). …Run Code Online (Sandbox Code Playgroud) rails activerecord对准备好的语句有什么支持吗?我能说的最好 - 没有.
在GNUC C中,您可以使用typeof(expression),并且使用内部具有副作用的表达式是合法的.例如,你可以拥有这个C代码:
int x = 0;
typeof(x++) y;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,副作用被忽略,之后x仍然为零(这是有道理的,因为类型只是编译时的事情).
但是,海湾合作委员会的文件说:
当且仅当它是可变修改类型的表达式或这种类型的名称时,才评估typeof的操作数的副作用.
这句话是什么意思?是否真的可以typeof用副作用编写,并且副作用实际上是在运行时执行的?对我来说,这句话似乎表明了这一点.
为什么export在用作命令管道的最后一步时会失败?
echo FOO=bar | xargs export
# => xargs: export: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我可以通过这种方式重写它以实现我想要的:
export `echo FOO=bar`
Run Code Online (Sandbox Code Playgroud)
但为什么我不能export以第一种方式使用?
当播放(触发)音频或 MIDI 剪辑时,需要使用 OSC 将其名称发送到另一个应用程序。
LiveAPI是一个接口,允许人们使用 python 脚本探索和自动化Ableton Live。
执行此操作的代码必须用 python 脚本编写,该脚本必须放置在 Ableton Live 可以找到它的特定文件夹中,在 Live 的首选项中选择。
有关 LiveAPI 的更多信息,请访问以下网站:
http://www.assembla.com/wiki/show/live-api
http://groups.google.com/group/liveapi
为什么会出现此错误?
Regexp.new("[#$]")
# => SyntaxError: (irb):1: syntax error, unexpected $undefined
# => Regexp.new("[#$]")
# ^
# (irb):1: unterminated string meets end of file
# from ~/.rvm/rubies/ruby-1.9.3-p194/bin/irb:1:in `<main>'
Run Code Online (Sandbox Code Playgroud)
这应该描述由单个$或#字面组成的字符串子集.而且,AFAIU Ruby的正则表达式引擎,#并且$ 不需要进行转义字符类中,即使它们通常的元字符.
我会从红宝石试图插值错误消息猜测$时,它的打#双引号内,但是......为什么呢?订购很重要.在$和#字符有多个重载的行为,所以我在一个关于什么触发这方面的损失.
PS,FYI:
/[#$]/
# => SyntaxError: (irb):1: syntax error, unexpected $undefined
/[$#]/
# => /[$#]/
Regexp.new '[$#]'
# => /[$#]/
Regexp.new '[#$]'
# => /[#$]/
Regexp.new "[#$]"
# => SyntaxError: (irb):1: syntax error, …Run Code Online (Sandbox Code Playgroud) 假设cocoa应用程序必须在退出之前执行一些非常重要的objective-c操作(出于任何原因 - 崩溃或退出).
是否可以确保执行任意Objective-c代码以响应每个崩溃事件?(SIGINT,SIGBUS,SIGSEGV等,忽略了"uncatchables"( ,SIGSTOP,SIGKILL闪电的螺栓等))
知道你的钩子试图做什么会很有帮助.
例如:假设要让应用程序运行,它绝对必须更改某个可变系统范围配置变量X的值.在启动时,应用程序会获取X当前状态的快照,然后对其进行修改.当应用程序成功退出时,它只会在终止之前将X恢复为隐藏的原始值.我的问题是:即使应用程序崩溃,是否可以确保X得到恢复?
对不起,这可能是一个noob问题.这(economic.rb)是一个解析世界经济数据的脚本.我不确定如何将xml文件传递给它.通常情况下,我会这样做
ruby economic.rb
Run Code Online (Sandbox Code Playgroud)
但是,File.open将ARGV [0]作为参数.如何在运行脚本时将xml文件(data.xml)传递给它.
economic.rb
require 'rubygems'
require 'nokogiri'
File.open(ARGV[0]) do |f|
xml_doc = Nokogiri::XML::Document.parse(f)
countries = xml_doc.css('country')
most_populous = countries.max_by {|node| node['population'].to_i}
puts "The most populous country in 1996 was #{most_populous['name']} with a population of #{most_populous['population']}"
puts
puts "The five countries with the highest inflation rate in 1996 were:"
countries.sort_by {|country| -(country['inflation'] || 0).to_f} [0..4].each do |country|
puts " #{country['name']} - #{country['inflation']}%"
end
continent_info = countries.group_by {|country| country['continent']}
puts
puts "The continents and their countries in …Run Code Online (Sandbox Code Playgroud)