FPGA Notes

XMD的Watch功能

0
阅读(1898)

问题:通常我们设置breakpoint只能设置在某个函数或者某条指令上,那么我能不能在某个变量变化的时候让程序停下并让GDB指示现在停在哪里?

解决:通过XMD的Watch功能。

怎样使用watch功能?
- EDK --> MicroBlaze --> Configure IP --> Debug --> Number of Write/Read Address Watchpoints 设置为需要的数目,因为watch功能需要硬件支持
- 在使用GDB连接XMD并下载程序之后,在XMD输入相应的watch命令:

watch {r | w}

[]


引用
Example Usage:
watch r 0x400 0x1234
watch r 0x40X 0x12X4
watch r 0b01000000XXXX 0b00010010XXXX0100
watch r 0x40X

说明
Sets a read or write watchpoint at address. If the value compares to data, stop the processor.
• Address and Data can be specified in hex “0x” format or binary “0b” format.
• Don’t care values are specified using X.
• Addresses can be only of contiguous range.
• Default value of data is 0xXXXXXXXX. That is, it matches any value.


- 在GDB中Continue,程序就会在相应的地方停下,并在XMD窗口显示如下内容:

引用
XMD% watch w 0xbe4
XMD% Write Watchpoint 1 Hit, Processor Stopped at 0x000002e4


后续问题1: 这个watch和GDB图形程序中的Watch Expression有什么区别?
Watch Expression只能看到Expression的内容,不会在内容改变时将停下。

后续问题2: 怎样找到某个variable的地址?
方法1: 定义一个指针,把指针指向这个variable,就能得到地址了
方法2: 在GDB的Watch Experession中使用取地址符将这个variable的地址取出来。
方法3: 把这个变量定义为全局变量,那么地址在objdump的结果中就能直接找到。

Baidu
map