GDB 可以跟踪内存地址何时被释放吗?在地址上放置 awatch没有帮助,因为当释放地址处的内存时它不会中断,而仅在触摸它时才中断。
我认为通过使用free(),仅释放指向内存的指针,但内容仍然可以存在,直到被另一个内存分配函数使用。
(gdb) p (char *)0xee20229c
$2 = 0xee20229c "XYZ"
(gdb) watch *(char *)0xee20229c
Hardware watchpoint 3: *(char *) 3995083420
(gdb) c
Continuing.
...
...
Hardware watchpoint 3: *(char *) 3995083420
Old value = 88 'X' // Changes only when the contents are overwritten,
New value = 0 '\0' // but not when the memory location '0xee20229c' is freed.
Run Code Online (Sandbox Code Playgroud) 我正在使用 GDB 检查内存地址的内容,但不知道它是否正确显示。
(gdb) p (char *)0x8182f40
$4 = 0x8182f40 "XYZ"
(gdb)
(gdb) x/40x 0x8182f40-16
0x8182f30: 0x00000000 0x00000000 0x000000a8 0x00000010
0x8182f40: 0x005a5958 0x00000000 0x00000000 0x00000029
0x8182f50: 0x00000000 0x00000000 0x00010000 0x082439d8
0x8182f60: 0x08199100 0x00000000 0x08000000 0x00002f08
0x8182f70: 0x00000002 0x000000b1 0x00000000 0x00000000
0x8182f80: 0x00000000 0x00000000 0x00000000 0x00000000
0x8182f90: 0x00000000 0x00000000 0x000000d4 0x00000002
0x8182fa0: 0x000003f1 0x00007162 0x00000002 0x08178d00
0x8182fb0: 0x00000000 0x080ef4b8 0x00000000 0x00000000
0x8182fc0: 0x00000000 0x00000000 0x0000021d 0x00000000
Run Code Online (Sandbox Code Playgroud)
上面的内容0x8182f40显示为0x005a5958,但这看起来是相反的。那是对的吗?
现在按字节打印,我得到这个:
(gdb) x/40bx 0x8182f40-16
0x8182f30: 0x00 0x00 0x00 0x00 0x00 …Run Code Online (Sandbox Code Playgroud) 我正在使用perl来访问我从DD-MON-YYYY格式获取日期的数据库.我需要执行2个操作:
将此日期与两个日期进行比较,以查看它是否位于该时间范围内.
我的$ chdate = '15 -Feb-2013';
sub get_stats {
my %map = ( 'Jan' => '01', 'Feb' => '02', 'Mar' => '03', 'Apr' => '04',
'May' => '05', 'Jun' => '06', 'Jul' => '07', 'Aug' => '08',
'Sep' => '09', 'Oct' => '10', 'Nov' => '11', 'Dec' => '12');
$chdate =~ s/(..)-(...)-(....)/$map{$2}\/$1\/$3/;
print "New date: $chdate";
Run Code Online (Sandbox Code Playgroud)
}
我如何执行(2)操作?
我有一个旧版本的Perl(没有Time :: Piece模块),我没有权限更新:)