2011-07-21 70 views
1

我有一个关于当我运行离散事件模拟大约一分钟时出现错误的“黑匣子”问题。一切正常,并成功完成后,但该系统在模拟过程中输出以下消息一次在一些点:C++错误(202):命令令牌太长

Error (202): Command token too long 

我从来没有见过这样的事情。我想知道它指的是什么“命令”。也许这是system("...")调用,我在程序中做了几次,以绘制和可视化它生成的数据。

对不起,我不能提供任何代码,因为我不知道错误来自哪里。有没有一种有效的方法来发现系统在哪一点生成此消息?或者无论如何,你有没有在你自己的C++编程经验中遇到这样的错误,从而建议它可能来自哪里?

我使用Ubuntu 11.04并使用GCC编译。该错误出现在运行时期间模拟的模拟特别长(30+秒),并且不会在较短的情况下出现。我应该强调,“错误”不会停止代码的执行,并且实际上不会在模拟数据的可视输出中引起任何可见的错误。

+1

平台/操作系统?你是如何在终端上显示错误的? – orlp

+0

我更新了操作系统信息的问题。谢谢。 –

+0

我认为你需要提供更多关于你的黑盒模拟器的细节 - 就像它读取一个通过lex/yacc/bison或类似的东西传递的命令文件。 – Soren

回答

0

它来自一个词法分析器,告诉你程序中的一个标记(标识符/预处理标记/等)比较冗长。查看代码,看看是否有任何可笑的长字符串或预处理器标记。

+2

这不是真的 - 错误会发生在编译时。 – Puppy

+0

有趣。由于我只在较长的模拟运行中得到错误(正如编辑的问题描述的那样),所以这可能必须是一个动态生成的字符串(不断增长)。你有一个“可笑的漫长”的想法,你能举个例子吗? –

+0

我不知道“可能长得多”是什么;我看到的例子是一串4400字符的字符串。也许它超出了一些预定义的限制,比如128,256,1024 ......我不确定。 – djhaskin987

2

写类似于下面的程序:

int trials 10000; 
string str("ls "); 
while(trials--) 
{ 
system(str.c_str()); 
str += "a"; 
cout << "chars in cmd = " << trials << endl; 
} 

将陆续运行像 LS命令,LS一,LS AA,LS AAA,同时打印到它是什么试验#控制台。

如果你对错误来自何处是正确的,最终它会得到关于“令牌太长”的相同错误信息,如果是,告诉你cmd可能有多少个字符。然后将此限制编码到您的真实C++程序中,以便它不会发出错误。

如果它没有重现错误,请尝试使#次试验更大,比如说高达100k。如果它仍然没有发生,那么错误可能来自其他地方。