[英]valgrind: Heap block lo/hi size mismatch when trying to debug a C++ program running inside Docker container
在嘗試調試我的 C++ 二進制文件時,我遇到了以下問題。
valgrind: m_mallocfree.c:307 (get_bszB_as_is): Assertion 'bszB_lo == bszB_hi' failed.
valgrind: Heap block lo/hi size mismatch: lo = 1, hi = 4294967295.
This is probably caused by your program erroneously writing past the
end of a heap block and corrupting heap metadata. If you fix any
invalid writes reported by Memcheck, this assertion failure will
probably go away. Please try that before reporting this as a bug.
host stacktrace:
==1747== at 0x58013284: ??? (in /usr/lib64/valgrind/massif-amd64-linux)
==1747== by 0x58013397: ??? (in /usr/lib64/valgrind/massif-amd64-linux)
==1747== by 0x58013531: ??? (in /usr/lib64/valgrind/massif-amd64-linux)
==1747== by 0x5801BD6D: ??? (in /usr/lib64/valgrind/massif-amd64-linux)
==1747== by 0x5800CDC1: ??? (in /usr/lib64/valgrind/massif-amd64-linux)
==1747== by 0x580614A7: ??? (in /usr/lib64/valgrind/massif-amd64-linux)
==1747== by 0x580737A7: ??? (in /usr/lib64/valgrind/massif-amd64-linux)
==1747== by 0x580738DC: ??? (in /usr/lib64/valgrind/massif-amd64-linux)
==1747== by 0x580C9561: ??? (in /usr/lib64/valgrind/massif-amd64-linux)
==1747== by 0x580C96AA: ??? (in /usr/lib64/valgrind/massif-amd64-linux)
==1747== by 0x580720CD: ??? (in /usr/lib64/valgrind/massif-amd64-linux)
==1747== by 0xDEADBEEFDEADBEEE: ???
==1747== by 0xDEADBEEFDEADBEEE: ???
==1747== by 0xDEADBEEFDEADBEEE: ???
sched status:
running_tid=47
Thread 47: status = VgTs_Runnable (lwpid 1861)
==1747== at 0x4C2922D: free (vg_replace_malloc.c:540)
==1747== by 0x9A7CB7B: __libc_freeres (in /usr/lib64/libc-2.17.so)
==1747== by 0x4A24739: _vgnU_freeres (vg_preloaded.c:77)
client stack range: ??????? client SP: 0x289569C8
valgrind stack range: [0x1009516000 0x1009615FFF] top usage: 5064 of 1048576
但有趣的事實是,當相同的二進制文件在容器外(在 VM 上)運行時,它運行得非常好。 如果我的源二進制文件有 memory 鏈接(根據 Valgrind 常見問題解答),我對為什么不在容器中運行時沒有遇到問題感到困惑。
任何幫助表示贊賞。
最有可能是這個問題: https://github.com/sfackler/rust-postgres/issues/74#issuecomment-301464576
我在基於centos:7
的 Docker 容器中遇到了這個問題,也可以使用--tool=memcheck
重現它。 在 valgrind 調用中添加--run-libc-freeres=no
為我解決了這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.