#include<stdio.h>
#include<string.h>
int main(void)
{
int f;
char duma[] = "asd char";
f = strlen(duma);
}
因此,当我在调试器中运行它并在“监视”表中输入strlen(data)时,它返回像strlen()这样的单词之类的消息不存在或类似的东西,意思是strlen不存在,但是在本地f = strlen(duma)我的意思是它进行计算并显示数组中的字符数。在立即它就像在手表strlen不存在一样......
所以任何建议我该如何解决?
提前致谢
答案 0 :(得分:2)
“监视”用于变量而非函数,但有一些例外。通常,您不希望将函数放在监视窗口中,因为它们可能有副作用,并且每次显示时都会更改程序的状态。
对于这样的代码,您应该将f
放在观察窗口中,而不是strlen(duma)
。
答案 1 :(得分:1)
strlen是一个函数,而不是一个变量。调试器必须每一步都调用该函数来更新正确的值。这不会非常有效。无论如何,调试器要求您在那里输入变量名,而不是函数。
答案 2 :(得分:0)
您可能在调试器的表达式计算器上遇到以下限制:
编辑:
我认为我对'内在'部分不对。我最初使用VS2010进行测试(这是我最容易获得的) - VS2010似乎能够毫无问题地评估strlen(duma)
。
当我搬到一台装有VS2008的机器上时(抱歉 - 现在没有安装VS2005 ......),无论strlen(duma)
的设置如何,调试器都无法评估strlen()
是内在与否。
再修改一次:
在VS2008中,我无法在调试器监视窗口中评估strlen(duma)
。但是,我能够在监视窗口中评估myStrlen(duma)
,其中myStrlen()
是明显的包装器,除了返回strlen()
之外什么也没做。这可能是您的解决方法(或者您可能希望升级到VS2010)。
答案 3 :(得分:0)
如果您有疑问,则无法进入strlen函数,那么原因是strlen来自标准库,您无法进入该函数,因为它们通常会被删除调试符号。
用户定义的函数使用选项进行编译以保留调试符号,因此您可以逐步进入这些函数调用并逐行查看执行。
To have symbols from these routines available, you must satisfy two
requirements for GDB:
* You must have debug versions of the libraries available.
* GDB must know where to find them.
正如其他人已表示你无法监视功能,你可以观察变量以了解其状态的变化。