我英语不好,所以请原谅我的英语问题。
我在 Windows 7 中使用 AptanaStudio 3 和 Ruby 1.9.2。当我尝试使用 Win32 memcpy 从 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 字符串中读取文本,包括未初始化的位置。
所以我想忽略错误或允许字符串包含无效文本。有人会帮助我吗?