在 Windows 上,有几个不错的替代品(大部分是付费的)可以让您监控串行端口通信。在 OSX 上有很多终端应用程序可以让您与串行设备通信,但我还没有找到一种机制来监视串行端口通信。
具体用例是: 我有一个位于/dev/tty.usbmodem99999 上的 USB 串行设备
我编写了一个运行多个命令的集成测试(成功)。
但是在重新运行命令时设备没有响应。我已经(尽我所能)确认该设备没有问题。它按预期在其他平台上工作。但是在 OSX 上,我只能在重置设备(电源循环)后重新运行测试。
我的理论是我的代码没有正确释放设备,但是当我看不到我的设备和我的应用程序之间的通信时很难确认。
此应用程序:“http://www.aggsoft.com/serial-port-monitor.htm”具有“ spy ”功能,我一直无法在 OSX 上找到类似的功能。我在 osx 上试验过“串行工具”,但它看起来不像是在单个端口上进行 spy 操作,在这种情况下,用例看起来像是两个设备之间的直通而不是在端口上进行监视.
非常感谢任何想法。
正在使用的串行库是: https://github.com/jacobsa/go-serial
最佳答案
您使用过 DTrace 吗?
我用它来监控 FTDI USB/串行转换器和第 3 方“黑盒”应用程序之间的 USB 通信。所以我可以获取应用程序发送到 USB 串行端口的一切。
这非常简单,因为我知道应用程序的名称,因此 DTrace 可以观察到它。我编写了 DTrace 脚本来观察应用程序打开的文件描述符(寻找“/dev/tty.usbmodem...”),然后观察与该文件描述符的交互。
我没有观察到设备驱动程序。原则上,如果内核或设备驱动程序被编译为与 DTrace 一起工作,DTrace 就可以做到这一点,尽管不确定是否如此。 Apple 还可以构建对 DTrace“不可见”的代码(例如,我相信 iTunes 对 DTrace 是不透明的,以保护其 DRM 机制。)
因此,一个可能的起点是观察所有操作系统打开/创建调用,寻找/dev/tty.usbmodemXXX,并尝试识别子系统并观察它。您可能会发现可以观察子系统,这应该有助于了解 OS+设备驱动程序在做什么。
这不是微不足道的。如果您的时间有值(value),获得硬件 USB 嗅探器并将其放入电缆中可能更便宜、更可靠,尤其是如果它只有 1.2Mbits 或 12MBits USB(更高数据速率的嗅探器要贵得多)。
这些链接可能有帮助:
About DTrace
DTrace Guide
DTrace book
Brendan Gregg's Top 10 DTrace scripts for Mac OS X
Apple DTrace manual
Hooked on DTrace
关于macos - 在 osx 上嗅探 usb 串行通信的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33744279/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search