Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Nyahpepijat Fail Teras Dijana pada Pengedaran Linux Berbeza dengan Tepat?

Bagaimanakah Saya Boleh Nyahpepijat Fail Teras Dijana pada Pengedaran Linux Berbeza dengan Tepat?

DDD
DDDasal
2024-12-17 06:35:25237semak imbas

How Can I Accurately Debug Core Files Generated on Different Linux Distributions?

Menyahpepijat Fail Teras Merentasi Pengedaran Linux Berbeza

Apabila fail teras dijana pada pengedaran Linux berbeza daripada persekitaran pembangunan anda, surih tindanan mungkin tidak bermakna sepenuhnya. Boleh laku yang dipautkan secara dinamik bergantung pada alamat dalam perpustakaan kongsi, dan alamat ini boleh berbeza-beza antara pengedaran. GDB mungkin tersilap mengaitkan ranap sistem kepada fungsi dalam salinan pustaka anda, manakala sistem pelanggan mungkin mempunyai fungsi yang berbeza pada alamat yang sama.

Untuk mengesahkan ketepatan surih tindanan, membuka fungsi yang berkenaan mungkin mendedahkan bahawa alamat termasuk dalam arahan atau didahului oleh arahan bukan PANGGILAN. Dalam kes sedemikian, surih tindanan tidak boleh dipercayai.

Untuk mendapatkan surih yang lebih tepat, anda boleh meminta pelanggan menyediakan perpustakaan berikut yang digunakan oleh binari bermasalah:

cd /
tar cvzf to-you.tar.gz lib/libc.so.6 lib/ld-linux.so.2 ...

Pada anda sistem:

mkdir /tmp/from-customer
tar xzf to-you.tar.gz -C /tmp/from-customer
gdb /path/to/binary
(gdb) set solib-absolute-prefix /tmp/from-customer
(gdb) core core  # Important: Set solib-... before loading core
(gdb) where      # Get meaningful stack trace!

Nyahpepijat dengan Dioptimumkan Perduaan

Daripada menasihati pelanggan untuk menjalankan perduaan -g, pendekatan pilihan ialah membina perduaan dengan kedua-dua bendera pengoptimuman -g dan -O2 dan menanggalkan maklumat nyahpepijat sebelum pengedaran:

build with -g -O2 -o myexe.dbg
strip -g myexe.dbg -o myexe
distribute myexe to customers
when a customer gets a core, use myexe.dbg to debug it

Ini membolehkan penyahpepijatan simbolik penuh (fail/baris, pembolehubah setempat) tanpa berkongsi butiran kod sumber yang sensitif.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Nyahpepijat Fail Teras Dijana pada Pengedaran Linux Berbeza dengan Tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn