如何在.bss中正确设置变量并使其成为init。 value = 0

时间:2017-01-17 03:15:08

标签: debugging gdb init

我自己创建自己的makefile。 我从程序中得到一些奇怪的结果,所以我只是简单地插入一些简单的变量(测试)。 我想问为什么测试不= 100 ?????? 在什么情况下会发生什么?

这是gdb

中显示的结果
74    __CRC_CLK_ENABLE();
(gdb) step
182 test = 100;
(gdb) p test
$1 = 236 '\354'

我在linux上运行,这是我第一次使用命令行并创建自己的makefile。 我正在研究stm32项目。 我的问题是: 1)我有一些变量和init为零,它落入.bss部分,但是一旦我调试它并发现它不是零的情况 当我将它初始化为非零时,它会落入.data部分,并且一旦步进它就会出现非零值 2)一旦我使用gdb启动程序,它不会落入main(),为什么? enter image description here

这是我的链接器文件:

  _sidata = .;
.data : /* LMA address is _sidata (in FLASH) */
{
    . = ALIGN(4);
    _sdata = .; /* data section VMA address */
    *(.data*)
    . = ALIGN(4);
    _edata = .;
} >ram

/* Uninitialized data section (zeroed out by startup code) */
.bss :
{
    . = ALIGN(4);
    _sbss = .;
    *(.bss*)
    *(COMMON)
    . = ALIGN(4);
    _ebss = .;
} >ram AT >flash

1 个答案:

答案 0 :(得分:0)

下面:

(gdb) step
182 test = 100;
(gdb) p test
$1 = 236 '\354'

在第182行执行之前,您已停止test的值可能未初始化,恰好是236。

如果要查看值100,则需要执行next命令,以便在分配后查看test 的值。