调试器变得怪异吗?

时间:2010-07-23 00:39:44

标签: c visual-studio-2005 debugging

#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不存在一样......

所以任何建议我该如何解决?

提前致谢

4 个答案:

答案 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.

正如其他人已表示你无法监视功能,你可以观察变量以了解其状态的变化。