我在共享庫內得到SEGSEGV
後,試圖獲取並將堆棧追蹤保存到文件中。共享庫是一個封閉源代碼產品的插件。所有這些都適用於生產,我無法直接訪問它。共享庫內的追蹤功能
我的代碼捕獲SIGSEGV
信號,打印堆棧跟蹤並退出。我有這樣的事情:
/opt/ecelerity/libexec/site/ec_attachextensions.so [0x2aecc2019f11] /opt/ecelerity/libexec/site/ec_attachextensions.so [0x2aecc2019f11] 的/ opt/ecelerity/libexec目錄/site/ec_attachextensions.so [0x2aecc2019fee] /opt/ecelerity/libexec/site/ec_attachextensions.so [0x2aecc201a587]
/選擇/ ecelerity/sbin目錄/ ecelerity [0x5]
/選擇/ ecelerity/sbin目錄/ ecelerity(sieve_seng_execute + 0x82)[0x506d32] /opt/ecelerity/libexec/validate/sieve.so [ 0x2aecc2862c9e] /選擇/ ecelerity/sbin目錄/ ecelerity(VALIDATE_DATA + 0xA5的)[0x4a90d5] /選擇/ ecelerity/sbin目錄/ ecelerity(esmtp_message_factory + 0x154e)[0x46eace] /選擇/ ecelerity/sbin目錄/ ecelerity(schedule_event_and_dispatch +的0x6A) [0x49c59a]
問題是我不能擁有共享 庫中的函數和偏移量的名稱。據我所知,我可以在 addr2line實用程序的幫助下找到給定地址的函數名稱/文件名,我將在/proc/$PID/maps
中找到庫偏移量。
在那之後,我執行類似的東西:
addr2line -e /opt/ecelerity/libexec/site/ec_attachextensions.so (LIBRARY_OFFSET_FROM_MAPS_FILE - 0x2aecc2019f11)
哪裏0x2aecc2019f11
是從上面的堆棧跟蹤的地址。我想知道是否有任何方法可以在不觸及地圖文件的情況下獲取堆棧跟蹤中的函數名稱?換句話說,我該如何編程呢?請問dladdr
在這裏有幫助(dladdr
無法從我提供的backtrace
函數提供的地址獲取函數名稱)?