【发布时间】:2018-01-10 15:22:25
【问题描述】:
我在一行上有一个进程核心转储
// ptr is boost::shared_ptr<Whatever>
assert(ptr.unique())
即有两个shared_ptr 引用同一个对象,但程序逻辑上 期望独占所有权。这是逻辑问题,不是内存损坏。
使用 gdb,我可以看到 ptr 中包含的指针地址(例如 0x001234567890),并验证它是 use_count == 2。
在类似的东西上使用 hexdump 我可以很容易地找到其他事件:
$ xxd core2 | fgrep '9078 5634 1200'
114e3e1e0109c 002c 307f 0000 9078 5634 1200 0000 ...
15b8b2ba000d7 ffa2 307f 0000 9078 5634 1200 0000 ...
1618b644000e7 7fa3 307f 0000 9078 5634 1200 0000 ...
gdb 中有一个命令find 可以在指定区域中搜索指定值,但它需要正确分配的内存区域。
有一个命令info mem 显示有关内存区域的信息,但它不适用于核心转储。
还有其他方法可以找到这个地址/值的存储位置吗?
【问题讨论】: