遇到問題:
在使用valgrind跟蹤調試動態庫時,遇到如下問題,不知道問題發生在代碼哪里:
==11728== 1 errors in context 5 of 31:
==11728== Source and destination overlap in memcpy(0x4f35880, 0x4f35880, 163840)
==11728== at 0x4A08A9E: memcpy (mc_replace_strmem.c:878)
==11728== by 0x5885956: ???
==11728== by 0x5887CDC: ???
==11728== by 0x588DBEE: ???
==11728== by 0x5249391: ???
==11728== by 0x503E2D2: ???
==11728== by 0x405F5B: main (main.c:168)
一、在官方幫助中有:
從字面上看,主程序不要關閉(或卸載)動態庫,但怎么才算不不關閉動態庫呢?
看了半個下午,才搞懂這個是什么意思:
正常情況下,我們在程序中打開動態庫后,在程序結束后,都要關閉動態庫。這樣的話,就無法找到符號表。
二、解決方案:
把關閉動態庫的代碼注釋掉即可。
例如在glib中:
//g_module_close(mode_dispatch);
ps:兩年前遇到過同樣的問題,今天有遇到就忘了當時是怎么解決的。還是記錄一下吧。
