我有一个C#4.0解析器.它接受'dynamic'作为关键字作为类型.我的解析器会跳过以下形式的C#3.0程序中发现的语句:
dynamic = <exp> ;
Run Code Online (Sandbox Code Playgroud)
那么,它真的是动态关键字吗?或者它仍然可以用作任意标识符名称?(如果是这样,为什么'int'不是以同样的方式对待)?
是否有某个参考规范说明dynamic是否是关键字?最新的ECMA C#4规范甚至没有提到"动态",我在MS网站上找到的最好的是"初步规范",它说它是一个关键字,但我怀疑这只是草率的写作.
是否有(首选免费)工具可以分析方法中可能有多少种不同的组合?我目前正在重构一个有很多if/switch语句的方法,我很好奇这个方法有多少可能的不同执行方式.
假设我有一个简单的方法:
public void DoSomething(bool flag1, int value)
{
if (flag1)
{
if (value > 0)
{
Console.WriteLine("Flag1 & value > 0");
return;
}
else
{
Console.WriteLine("Flag1 & value <= 0");
return;
}
}
elseif (value > 0 and value < 10)
{
Console.WriteLine("Flag1 is false and value between 0 & 10");
return;
}
if (value < 0)
{
Console.WriteLine("Flag1 = false & value <= 0");
return;
}
elseif(value = 0)
{
Console.WriteLine("Flag1 = false & value >= 10");
return; …Run Code Online (Sandbox Code Playgroud) @property(nonatomic, retain) NSMutableArray* playerList;
Run Code Online (Sandbox Code Playgroud)
...
team.playerList = [[NSMutableArray alloc] initWithArray:self.playerList];
Run Code Online (Sandbox Code Playgroud)
这是内存泄漏吗?
那么为什么静态分析仪不能选择这个呢?
我知道我的问题听起来有点模糊,但我在网上找不到任何教程。我不是在寻求答案,而是在寻求更多解释。\nBNF 的示例:
\n\n<prog> ::= \xe2\x80\x9cint main() { <stat_list> return 0; }\xe2\x80\x9d\n<stat_list> ::= <stat>\n | <stat_list> <stat>\n<stat> ::= <cmpd_stat>\n | <if_stat>\n | <iter_stat>\n | <assgn_stat>\n | <decl_stat>\n<cmpd_stat> ::= { <stat_list> }\n<if_stat> ::= if ( <exp> ) <stat>\n | if ( <exp> ) <cmpd_stat>\n | if ( <exp> ) <stat> else <stat>\n | if ( <exp> ) <cmpd_stat> else <stat>\n | if ( <exp> ) <stat> else <cmpd_stat>\n | if ( <exp> ) <cmpd_stat> else <cmpd_stat>\nRun Code Online (Sandbox Code Playgroud)\n\n将其转换为 python 以使我的程序使用上述条件创建随机程序的最简单方法是什么?任何有用网站链接的帮助将不胜感激。
\n是否有CPAN模块可以自动化着名的ollydbg调试器?如果是,有人可以提供这样的模块和一些教程/文档/示例吗?
我们有一个 Windows32 应用程序,其中一个线程可以通过执行 SuspendThread/GetThreadContext/ResumeThread 来停止另一个线程以检查其状态 [PC 等]。
if (SuspendThread((HANDLE)hComputeThread[threadId])<0) // freeze thread
ThreadOperationFault("SuspendThread","InterruptGranule");
CONTEXT Context, *pContext;
Context.ContextFlags = (CONTEXT_INTEGER | CONTEXT_CONTROL);
if (!GetThreadContext((HANDLE)hComputeThread[threadId],&Context))
ThreadOperationFault("GetThreadContext","InterruptGranule");
Run Code Online (Sandbox Code Playgroud)
极少数情况下,在多核系统上,GetThreadContext 返回错误代码 5(Windows 系统错误代码“拒绝访问”)。
SuspendThread 文档似乎清楚地表明目标线程已挂起,如果没有返回错误。我们正在检查 SuspendThread 和 ResumeThread 的返回状态;他们从来没有抱怨过。
怎么可能我可以挂起一个线程,但不能访问它的上下文?
这个博客 http://www.dcl.hpi.uni-potsdam.de/research/WRK/2009/01/what-does-suspendthread-really-do/
表明 SuspendThread 在返回时可能已开始暂停另一个线程,但该线程尚未暂停。在这种情况下,我可以看出 GetThreadContext 会有什么问题,但这似乎是定义 SuspendThread 的愚蠢方法。(SuspendThread 的调用如何知道目标线程何时真正挂起?)
编辑:我撒谎了。我说这是针对 Windows 的。
好吧,奇怪的事实是,我在 Windows XP 64 下没有看到这种行为(至少在上周没有,我真的不知道在那之前发生了什么)……但我们一直在测试这个 Windows 应用程序Ubuntu 10.x 上的 Wine。当由于某种原因尝试获取线程状态失败时,GetThreadContext的Wine 源在第 819 行包含拒绝访问的返回响应。我在猜测,但似乎 Wine GetThreadStatus 认为线程可能无法重复访问。为什么在 SuspendThead 超出我的范围之后这会是真的,但有代码。想法?
EDIT2:我又撒谎了。我说我们只看到了 Wine 上的行为。不......我们现在发现了一个 Vista …
我知道已经存在一个Locale.getAvailableLocales()函数和一些其他同类函数,它们会返回所有可用的语言(无论它们是否可用于您的手机或没有)
我正在寻找一种方法来返回我翻译的语言(即:如果我有3个文件夹值-en,values-es,values-pt;我希望得到答案:[en,es,pt] ,或[英语,西班牙语,葡萄牙语]
我想知道是否有工具可以
最终,我希望根据线程在运行时(多线程代码覆盖工具)之间如何相互交互来进行代码覆盖,以便找到潜在的多线程错误.
如果我没有清楚地解释我的问题,我很抱歉,我很乐意提供任何细节.
我想对 C 文件运行简单分析(例如,如果您使用参数调用foo宏INT_TYPE,然后将响应转换为int*),我不想预处理该文件,我只想解析它(这样,例如,我将有正确的行号)。
即,我想从
#include <a.h>
#define FOO(f)
int f() {FOO(1);}
Run Code Online (Sandbox Code Playgroud)
令牌列表,例如
<include_directive value="a.h"/>
<macro name="FOO"><param name="f"/><result/></macro>
<function name="f">
<return>int</return>
<body>
<macro_call name="FOO"><param>1</param></macro_call>
</body>
</function>
Run Code Online (Sandbox Code Playgroud)
无需设置包含路径等。
是否有任何预先存在的解析器可以做到这一点?我所知道的所有解析器都假设 C 是经过预处理的。我想访问宏和实际的包含指令。
我有一个"遗留"代码,我想重构.
代码基本上是对服务器的远程调用并获得回复.然后根据回复执行相应的.
代码骨架示例:
public Object processResponse(String responseType, Object response) {
if(responseType.equals(CLIENT_REGISTERED)) {
//code
//code ...
}
else if (responseType.equals(CLIENT_ABORTED)) {
//code
//code....
}
else if (responseType.equals(DATA_SPLIT)) {
//code
//code...
}
etc
Run Code Online (Sandbox Code Playgroud)
问题是有许多if/else分支,并且每个内部的代码都不是微不足道的.
因此很难维护.
我想知道这个最好的模式是什么?
我有一个想法是创建一个方法名称与responseType相同的单个对象,然后在processResponse内部使用反射调用与responseType同名的方法.
这将清理processResponse,但它会将代码移动到具有许多/多种方法的单个对象,我认为反射会导致性能问题.
是否有一个很好的设计方法/模式来清理它?