我终于在Lua for Wireshark为我的UDP协议创建了一个Dissector,但是工作流程非常糟糕.它包括在我的编辑器中编辑我的自定义Lua文件,然后双击我的示例捕获文件以启动Wireshark以查看更改.如果出现错误,Wireshark会通过对话框或树分析子窗格中的红线通知我.然后我重新编辑我的自定义Lua文件,然后关闭该Wireshark实例,然后再次双击我的示例捕获文件.这就像编译C文件一样只能看到一个编译器错误.
是否有更好(更快)的方式来查看我的更改,而无需一直重启Wireshark?
当时,我在启用了Lua的情况下使用Wireshark 1.2.9 for Windows.
在Scala中,我经常需要导入多个包含implicits和其他实用程序的包,特别是在REPL上:
import scala.collection.JavaConversions._
import scala.collection.{mutable => mut}
import com.myapp.db._
import com.orm._
val con = connectDb(...)
...
Run Code Online (Sandbox Code Playgroud)
我知道在Scala中无法导入多个包(虽然包对象范围可以帮助一点),但是从REPL呢?有没有办法在没有大量复制和粘贴的情况下从REPL执行此操作?我也试过使用:load,但在那里导入/创建的东西也没有被引入REPL的范围.我注意到:power命令确实将内容导入范围.
更新::load实际上确实有效.
- 关于交互式顶层和图形UI编程的几个问题:
是否可以从ocaml toplevel动态构建图形界面?
也可以使用图形库吗?
有没有办法以某种方式自定义SBCL REPL,使其与CLISP REPL类似.标准的SBCL REPL在Mac OS X上并不真正可用.我不能使用箭头键或退格键.
当我启动clojure REPL时,我有一些我想预先加载的clojure函数.除非您在REPL的上下文中使用它们,否则这些函数没什么用处.
如果它有帮助,我通常使用leiningen为我开始一个clojure REPL.
我如何告诉clojure(或leiningen,如果它不能通过扁平的clojure获得)为我预加载包含这些定义的clojure文件?
我希望暂停REPL会话,以便我可以关闭系统,然后在以后继续在REPL会话上工作,好像我从未关闭它,即不必丢失所有环境.
我认为可能的解决方案可能是
快照内存,保存到文件并稍后从文件加载env:我认为这将是最好的解决方案,就像使用Windows的"休眠"功能时一样.我发现这个heapdump实用程序用于获取内存快照以分析内存泄漏,但我不知道你是否可以从该快照中恢复整个环境,我找不到这样做的工具.
保存命令并重放它们:这种方法的一个主要缺点是虽然它适用于简单的事情var x = "Hello World";,但它不适用于像var reciptId = bankAccount.makePayment(1000);重复每次重放操作而不是保存原始函数调用的细节的事情.
序列化/反序列化整个环境:这将涉及制作环境中存在的所有对象的列表,然后建立一种机制将每个对象写入文件,即序列化它们,然后创建一个反序列化这些并加载它们的机制在需要的时候.我还没有看到一个干净的方法来序列化和反序列化js变量没有限制.我认为这个方法的主要限制是它无法保留引用,所以对象松散了它们的类,在序列化时必须重复事物并且在反序列化时失去它们的相等性 - 例如
var f = function (x) {...};
var a = {};
a.f = f;
a.f === f? //is true, not true if your serialization mechanism saves a function defn for f and a.f separately and deserializes them separately
,循环引用可能不起作用(x = {}; x.cyclic = x;... ).所以这种方法,如果它工作将需要大量的脏工作.
所以问题是,实现我希望实现的目标有多难?有什么其他解决方案可以做到这一点?实现这一目标是否存在重大阻碍?
此外,是否有任何替代节点repl程序(如浏览器中的控制台)可以像这样暂停?
相关:
我在我的宠物开源项目RevitPythonShell(建筑建模软件Autodesk Revit Architecture 2010的插件)中尝试了明显的路径:code.interact()使用IronPython引擎设置为STDIN和使用.NET流STDOUT.然后我将这些重定向到TextBox控件.它有点工作,但真的只是一个丑陋的黑客.
主要问题是让所有shell工作正常工作:历史记录的上箭头和下箭头,编辑,复制和粘贴,EOF,语法高亮,工具提示等.要做到这一点需要做很多工作,而且它并不是我想要解决的问题(我正在尝试在Revit中托管交互式shell,而不是制作完美的shell GUI).
如果这不是一个.NET项目,我可能会考虑重用PyCrust/PyWrap,但我不确定是否可以从WinForms项目中完成..NET有什么类似的东西吗?
有没有人实现过IConsole界面,可以展示我需要做什么的例子?看起来这将是正确的路线(而不是使用code模块),但对于我的生活,我无法弄明白.IronPython源代码没有任何评论.
更新:在尝试了一些东西后,我最终选择了精湛的IronLab代码.它包括一个带语法高亮的示例shell和all.代码很好,易于集成.检查有关如何嵌入它的提示的RevitPythonShell代码.
R,Python,Scala等都带有REPL环境,我不想错过,但是,大多数时候编辑它们的文本很糟糕,所以我在vim中编辑代码,粘贴它并查看输出并再次编辑vim中的代码.
我可以运行当前文件,!python %我可以用更多的vim魔法运行当前行,但是,这将启动解释器的新进程.
是否可以启动REPL并向正在运行的REPL发送代码行(显然可以得到结果)?
我一直在使用phpsh一段时间了,过去它运行得很好.但它的命名空间支持仍然不是很好,这可能非常令人沮丧.
\Somespace\Someclass::someStaticFunction()在没有禁用检查是否存在方法的情况下,这样做是行不通的,这会导致重置环境的拼写错误导致频繁的致命错误.
有多个PHP REPL,包括PHP内置shell(php -a),使用起来很糟糕.
有没有人知道一个替代方案或者一个具有正确名称空间支持的phpsh-fork?或者也许是一个简单的配置修复我忽略了......
一个例子:
这个测试文件:
<?
namespace testing;
function echoSome(){
echo 'Something';
}
\testing\echoSome();
Run Code Online (Sandbox Code Playgroud)
在phpsh中生成此输出(如预期的那样)
php> include '/path/test.php';
Something
php>
Run Code Online (Sandbox Code Playgroud)
但是再次尝试相同的调用不起作用:
php> \testing\echoSome();
Not executing input: Possible call to undefined function echoSome()
See /etc/phpsh/config.sample to disable UndefinedFunctionCheck.
Run Code Online (Sandbox Code Playgroud)
没有命名空间,该功能仍然可用:
<?
function echoSome(){
echo 'Something';
}
echoSome();
Run Code Online (Sandbox Code Playgroud)
在phpsh中:
php> include '/path/test.php';
Something
Run Code Online (Sandbox Code Playgroud)
电话仍然有效:
php> echoSome();
Something
Run Code Online (Sandbox Code Playgroud) C#" 交互式 窗口 "比" 即时 窗口 " 功能更全面.是否可以在调试会话期间将调试上下文加载到其中?