在eclipse CDT中监视函数内部的静态变量
在c语言中,当一个变量在一个函数中被定义为静态变量时,该变量的值始终保持不变。因此,它可能存储在bss或数据部分中 但是,在EclipseCDT调试中,当尝试检查此变量时,在表达式窗格中键入变量名仅在堆栈帧位于函数中时显示变量,就像局部变量一样 它是eclipse中的一个bug吗 编辑:在eclipse CDT中监视函数内部的静态变量,c,debugging,eclipse-cdt,C,Debugging,Eclipse Cdt,在c语言中,当一个变量在一个函数中被定义为静态变量时,该变量的值始终保持不变。因此,它可能存储在bss或数据部分中 但是,在EclipseCDT调试中,当尝试检查此变量时,在表达式窗格中键入变量名仅在堆栈帧位于函数中时显示变量,就像局部变量一样 它是eclipse中的一个bug吗 编辑: 在IAR Embedded workbench中,函数中的静态变量可以在调试过程中在函数外部观察,因此这是可能的。而实际上,变量存储在堆中。。。变量的范围仍然是函数的局部范围。它的值在该函数之外没有任何意义,并
在IAR Embedded workbench中,函数中的静态变量可以在调试过程中在函数外部观察,因此这是可能的。而实际上,变量存储在堆中。。。变量的范围仍然是函数的局部范围。它的值在该函数之外没有任何意义,并且在函数之外时它不应该改变。。。除非您向它传递指针,否则在这种情况下,您可以在任何有权访问该指针的函数中查看它
所以。。。不这不是一个bug。您需要用函数限定静态变量,以确定作用域,例如,
foo::myvar
如果在IAR Embedded workbench中的函数foo
中定义了myvar
,那么函数中的静态变量可以在函数外部查看,因此这是可能的。也许。。。但是,它们仍然超出了范围。我认为IAR这样做打破了变量声明范围的封装。为什么我们关心封装,我们没有进行“面向对象”的调试。比如说,我有一个函数,它有一个静态变量,它保存了函数被调用的次数。即使在函数的作用域之外,这对于调试也是有价值的信息。我们没有进行面向对象的调试。。。变量未定义,超出范围。如果你想检查内存,那么你就看一个内存地址。。。或在检查员中确定范围。