簡體   English   中英

valgrind:嘗試調試在 Docker 容器內運行的 C++ 程序時堆塊 lo/hi 大小不匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM