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
Lepaskan: 2024-12-17 06:35:25
asal
235 orang telah melayarinya

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 ...
Salin selepas log masuk

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!
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan