私は英語が苦手なので、英語の問題はご容赦ください。
Windows7のRuby1.9.2でAptanaStudio3を使用しています。Win32memcpyを使用してrubyデバッガーの共有メモリから文字列データを取得しようとすると、この問題が発生します。
# encoding: utf-8
require 'windows/file_mapping'
require 'windows/msvcrt/buffer'
require 'windows/handle'
include Windows::FileMapping
include Windows::MSVCRT::Buffer
include Windows::Handle
buf1 = 0.chr * 256
@mh = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, "TAG_NAME")
@address = MapViewOfFile(@mh, FILE_MAP_ALL_ACCESS, 0, 0, 0)
memcpy(buf1, @address, 256)
UnmapViewOfFile(@address)
CloseHandle(@mh)
puts buf1.unpack("Z*")
問題は以下のとおりです
c:/Ruby192/lib/ruby/1.9.1/syck/rubytypes.rb:151:in `count'
c:/Ruby192/lib/ruby/1.9.1/syck/rubytypes.rb:151:in `is_binary_data?'
C:/Users/Zenbook/SkyDrive/AptanaStudio/workspace/best_practice/test.rb:19:in `<top (required)>'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/ruby-debug-ide-0.4.16/lib/ruby-debug-ide.rb:112:in `debug_load'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/ruby-debug-ide-0.4.16/lib/ruby-debug-ide.rb:112:in `debug_program'
c:/Ruby192/lib/ruby/gems/1.9.1/gems/ruby-debug-ide-0.4.16/bin/rdebug-ide:87:in `<top (required)>'
c:/Ruby192/bin/rdebug-ide:19:in `load'
c:/Ruby192/bin/rdebug-ide:19:in `<main>'
Uncaught exception: invalid byte sequence in US-ASCII
memcpyの後にブレークポイントを使用しない場合、または文字列の長さのみを取得する場合は発生しません。つまり、char文字列のサイズが256、char文字列の長さが12で、12バイトを取得した場合、問題は発生しません。
これは、デバッガが初期化されていない場所を含むchar文字列からテキストを読み取れないためだと思います。
したがって、エラーを無視するか、文字列に無効なテキストを含めることを許可します。誰か助けてくれませんか?