小编Doc*_*awk的帖子

如何让rbenv继续调试符号?

rbenv在Mac OS X v10.8.3上安装了Ruby 2的开发版本,并使用它来编译我正在处理的gem.我有一个内存问题我想调试.不幸的是,无论何时我运行valgrind,gdb或者cgdb在a的上下文中rake spec,我都会遇到一堆像这样的错误:

warning: Could not find object file "/private/var/folders/5f/h1s00nhn0rv4ckkpg4k_bwhr0000gn/T/ruby-build.20130331232604.54521/ruby-2.0.0-dev/main.o" - no debug information available for "main.c".
Run Code Online (Sandbox Code Playgroud)

显然,该ruby-build目录不再存在.

我收到了一系列可能相关的错误valgrind.以下是示例:

--2564-- /Users/jwoods/.rbenv/versions/2.0.0-dev/lib/libyaml-0.2.dylib:
--2564-- dSYM directory is missing; consider using --dsymutil=yes
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用该--dsymutil=yes选项,我会收到与以下错误基本相同的错误gdb:

warning: (x86_64) /private/var/folders/5f/h1s00nhn0rv4ckkpg4k_bwhr0000gn/T/ruby-build.20130331232604.54521/ruby-2.0.0-dev/ext/openssl/ossl_bn.o unable to open object file
Run Code Online (Sandbox Code Playgroud)

根据另一个问题的答案,我试着在info target里面跑gdb.这是输出.

有什么方法可以指示rbenv将调试符号放在某些不会被清理的地方吗?

我正在使用GCC 4.7.1,我通过自制软件安装.我确切的Ruby版本字符串是ruby 2.1.0dev (2013-04-01 …

ruby gdb valgrind rbenv dsym

7
推荐指数
1
解决办法
731
查看次数

GLSL中的高斯分布式伪随机数发生器

我需要在GLSL版本120片段着色器中生成正态分布的伪随机数.

它们甚至不必是特别好的伪随机数.但它们确实需要正常分布.

我想如果我想编写自己的随机数发生器,我知道在哪里看,但我想看看是否已经发明了这样的东西.我还要感谢GLSL 120中统一分布的随机数生成器的任何链接.

作为一个注释,我已经看到了GLSL 的随机噪声生成问题.不幸的是,它看起来像单纯形和Perlin噪声有某种多模式分布.我想我可以使用mod函数,但我想知道是否有更合适的方法.

opengl random glsl

7
推荐指数
0
解决办法
1216
查看次数

我是如何让gcc生成.bundle而不是.so的?

我正在尝试编写Ruby扩展,并且我已经nmatrix.so整天成功编译了我的共享对象文件.但是,突然间,它开始生产nmatrix.bundle,而没有任何.so文件.

它没有给我任何链接器错误,所以我无法想象为什么会这样.我也没有改变我的Makefileextconf.rb.我一直在使用Ruby 1.9.3p0到rvm.

我已经尝试过git stash save我今天的工作并编译我知道应该在没有链接器错误(产生.so的东西)之前工作的东西.不幸的是,这也产生了一个.bundle文件.

很明显,我已经做了一些事情 - 可能是无意中安装了一些东西 - 这改变了一些关键的GCC设置.这是完全可能的,因为我花了大部分时间试图让LAPACK和ATLAS构建,并且还在某些时候安装了自制软件.

我发现有一种解决方法.我改变了这两行:

DLLIB = $(TARGET).bundle
# ...
LDSHARED = $(CC) -dynamic -bundle
Run Code Online (Sandbox Code Playgroud)

DLLIB = $(TARGET).so
# ...
LDSHARED = $(CC) -dynamic
Run Code Online (Sandbox Code Playgroud)

然后库正确编译和加载.但是,我没有在我extconf.rb(或其他地方)更改的内容,这会导致它自动生成带有.bundle文件的Makefile 而不是.so.

问题是:我究竟是如何造成这种情况的,我该怎么做才能恢复它?

c ruby macos gcc shared-libraries

6
推荐指数
1
解决办法
792
查看次数

为什么cblas_dgemm和cblas_sgemm在函数指针数组中有不同的指针类型?

我有一个函数指针数组,我用来调用适当的cblas_xgemm(例如,cblas_dgemmcblas_sgemm等,来自ATLAS/CBLAS).

当我告诉它使用cblas_dgemm函数指针时,这很好用; 使用适当的参数调用dgemm并返回正确的结果.

但是,当我cblas_sgemm通过函数指针调用时,我得到以下输出:

ldc must be >= MAX(N,1): ldc=0 N=2Parameter 14 to routine cblas_sgemm was incorrect
Run Code Online (Sandbox Code Playgroud)

我写了一个简短的测试程序来演示这个问题.cblas_sgemm没有函数指针的调用工作正常.

请特别注意以下gcc警告(另请参阅上面链接的gist,它具有完整的gcc输出):

test_cblas_sgemm.c:20:3: warning: initialization from incompatible pointer type [enabled by default]
Run Code Online (Sandbox Code Playgroud)

如果我cblas_sgemm在函数指针数组定义中注释掉这一行,我就不会得到这样的警告,即使对于该cblas_dgemm行也是如此.但这没有任何意义,因为这两个函数都应该具有相同的返回类型!

以下是适当的行cblas.h:

void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
                 const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
                 const int K, const float alpha, const float *A,
                 const …
Run Code Online (Sandbox Code Playgroud)

c function-pointers lapack atlas

6
推荐指数
1
解决办法
1561
查看次数

什么时候需要在Ruby C扩展中声明不稳定的VALUE?

我找不到很多文档,说明何时适合在Ruby扩展中声明VALUEas volatile,以避免使用中对象的过早垃圾收集.

这是我到目前为止所学到的.任何人都可以填补空白吗?

volatile不是需要使用:

  • 在C++对象成员中(因为它们从不在堆栈中?)
  • 在不调用Ruby API的C/C++方法中(因为在调用Ruby API 之前GC没有打开)

如果volatile 确实需要使用

  • 在C/C++方法中调用任何Ruby ALLOCmalloc宏/函数(因为这些可以在内存高度分散时触发GC)
  • 在C/C++方法调用任何Ruby功能(例如,rb_funcall,rb_ary_new等等)

其他避免GC的方法

  • 标记VALUEs正在使用中
  • 在对象创建期间禁用GC,然后重新启用它
  • 不要使用Ruby的分配方法(有风险)

一切都正确吗?我错过了什么细节?除了标记,是volatile唯一的方法吗?

c c++ ruby garbage-collection mark-and-sweep

6
推荐指数
1
解决办法
413
查看次数

Ruby删除可枚举列表中的重复项

在ruby中有一个很好的方法来删除可枚举列表中的重复项(即拒绝等)

ruby enumerable

5
推荐指数
1
解决办法
2905
查看次数

Xcode"警告:无法找到目标文件...没有可用的调试信息......"

搞乱单元测试插件的各种设置给我留下了一个混乱的项目文件.我似乎修复了它,但是有一个副作用:每次我运行插件时,控制台都会为每个类文件填充警告,如下所示:

警告:找不到对象文件"/ Users/elisevanlooij/Documents/Project Plug-ins/MyPlugin 8/build/MyPlugin.build/Debug/MyPlugin.build/Objects-normal/i386/MyPlugin.o" - 没有可用的调试信息为"/ Users/elisevanlooij/Documents/Project Plug-ins/MyPlugin 8/MyPlugin.m".

现在我完全理解为什么错误发生,因为路径/ Users/elisevanlooij/Documents/Project插件/ MyPlugin 8不再存在:"MyPlugin 8"是一个临时文件夹(myvlugin的svn版本8的签出)因为去了垃圾桶,也被清空了.MyPlugin的当前版本甚至不应该知道它,但不知何故,由于某种原因,Xcode和/或gdb不会放弃.我甚至抛弃了Precompiled Headers Cach路径中的相关缓存,但没有任何乐趣.谷歌搜索已经向其他人透露了这个问题,但没有解决方案.谁可以帮忙?

这些是具有值的构建设置(Debug).顺便说一句,就我所见,它们就像没有这个问题的插件一样.

ARCHS = $(ARCHS_STANDARD_32_BIT)

SDKROOT = macosx10.5

ONLY_ACTIVE_ARCH = YES

VALID_ARCHS = i386 ppc ppc64 ppc7400 ppc970 x86_64

SYMROOT = build

OBJROOT = $(SYMROOT)

CONFIGURATION_BUILD_DIR = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

CONFIGURATION_TEMP_DIR = $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

SHARED_PRECOMPS_DIR = $(CACHE_ROOT)/SharedPrecompiledHeaders

BUILD_VARIANTS = normal

DEBUG_INFORMATION_FORMAT = dwarf

ENABLE_OPENMP_SUPPORT = NO

GENERATE_PROFILING_CODE = NO

PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES

SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = NO

ALTERNATE_GROUP = $(INSTALL_GROUP)

ALTERNATE_OWNER = $(INSTALL_OWNER)

ALTERNATE_MODE = $(INSTALL_MODE_FLAG)

DEPLOYMENT_LOCATION = NO …
Run Code Online (Sandbox Code Playgroud)

xcode gdb

5
推荐指数
1
解决办法
8433
查看次数

Ruby中的Kernel :: eval的危险和警告?

我正在使用Ruby 1.9.2 p180.

我正在为Rubyvis编写一个连续的评估工具(成为SciRuby的一部分).基本上,您Rubyvis::Panel在输入文件中设置(例如test.rb),此SciRuby类(绘图仪)监视test.rb修改.当有变化时,SciRuby会运行脚本eval.

如果我从命令行运行它,该脚本可以工作,但是当执行时eval,绘图是错误的 - 一条直线,好像所有数据都消失了,而不是你在这里看到的.注意:以前,它在这里说SVG是不同的 - 但事实证明这是加载REXML而不是nokogiri的结果.

以下是测试脚本和评估代码.大多数产生直线(下面的编辑部分中描述的例外).

我不知道这是怎么回事.

我有几个想法,为什么它可能会发生,但没有线索的机制.

假设:

  1. eval不允许进行深层复制.从eval某些上下文中取出的对象是缺失的部分,特别是当使用lambda将数据处理为绘图的正确格式时.
  2. 出于某种原因,evalrequire调用时不尊重捆绑的dep列表- 可能在我的绑定中使用了错误版本的nokogiri?
  3. 其他一些必需的库(也许是RSVG?)已经重载了Rubyvis使用的一些方法.

以前有人见过这样的事吗?我有点在黑暗中感受到 - 完全不知道从哪里开始排除故障.

编辑9/15/11:新信息

看来呼叫OpenStruct.new导致问题.

如果我将数据定义为列表列表data = pv.range(0,10,0.1).map { |d| [d,Math.sin(d)+2+rand()] },则效果很好.

但是当数据被定义为OpenStructs列表时,以下代码会给出错误的输出:

data = pv.range(0, 10, 0.1).map {|x|
  o = OpenStruct.new({:x=> x, :y=> Math.sin(x) + 2+rand()})
  STDERR.puts o.inspect # …
Run Code Online (Sandbox Code Playgroud)

ruby eval

5
推荐指数
1
解决办法
336
查看次数

引用具有指定索引的枚举器值

假设我有一个可枚举的对象enum,现在我想得到第三个项目.

我知道一种通用方法是转换为数组,然后使用索引访问:

enum.to_a[2]
Run Code Online (Sandbox Code Playgroud)

但是这种方式会创建一个临时数组,效率可能会很低.

现在我使用:

enum.each_with_index {|v, i| break v if i == 2}
Run Code Online (Sandbox Code Playgroud)

但这是非常丑陋和多余的.

最有效的方法是什么?

ruby enumerable

5
推荐指数
2
解决办法
1402
查看次数

在Rails关系上使用Ruby的select方法并更新它

我有一个用户之前"投票"的ActiveRecord关系...

@previous_votes = current_user.votes
Run Code Online (Sandbox Code Playgroud)

我只需要根据当前的"挑战"过滤掉这些,所以Ruby的select方法似乎是最好的方法......

@previous_votes = current_user.votes.select { |v| v.entry.challenge_id == Entry.find(params[:entry_id]).challenge_id }
Run Code Online (Sandbox Code Playgroud)

但我还需要更新这些记录的属性,该select方法将我的关系转换为无法更新或保存的数组!

@previous_votes.update_all :ignore => false
# ...
# undefined method `update_all' for #<Array:0x007fed7949a0c0>
Run Code Online (Sandbox Code Playgroud)

如何像select方法那样过滤我的关系,但是不能失去用ActiveRecord更新/保存项目的能力?

在谷歌周围看似似乎named_scope出现在类似问题的所有答案中,但我无法弄清楚它们能否专门完成我所追求的目标.

ruby arrays activerecord ruby-on-rails

5
推荐指数
1
解决办法
3150
查看次数