Editor php Xiaoxin akan memperkenalkan anda cara memuatkan simbol nyahpepijat untuk proses berjalan. Dalam proses pembangunan perisian, penyahpepijatan adalah pautan yang sangat penting. Apabila kita menghadapi masalah dengan proses yang sedang berjalan, kita perlu memuatkan simbol nyahpepijat untuk nyahpepijat. Simbol penyahpepijatan mengandungi maklumat simbol kod, yang membolehkan kami mengesan masalah dengan lebih tepat semasa penyahpepijatan. Dalam artikel ini, kami akan menerangkan secara terperinci cara memuatkan simbol nyahpepijat untuk proses berjalan untuk membantu anda nyahpepijat dengan lebih baik.
Saya mempunyai aplikasi C yang berjalan pada banyak mesin dan kadangkala satu contoh akan menghadapi masalah dan berkelakuan pelik. Malangnya, ini hampir tidak pernah berlaku. Contoh produk ini disusun dengan pengoptimuman berat (-march=XXX -Ofast
) dan tidak mengandungi sebarang simbol nyahpepijat, jadi saya tidak boleh dengan mudah melampirkan penyahpepijat untuk menganalisis statusnya.
Tetapi saya fikir ia mungkin boleh memuatkannya ke dalam gdb menggunakan bendera tambah yang sama -g3
再次编译应用程序,然后我可以使用 symbol-file application_executable_with_debug_symbols
. Walau bagaimanapun, jika saya melakukan ini, titik putus tidak pernah menyala.
Adakah terdapat cara lain untuk melampirkan penyahpepijat pada aplikasi yang sedang berjalan dan memuatkan simbol penyahpepijatan? Atau adakah saya melakukan sesuatu yang salah (jelas)?
Terima kasih
Amalan terbaik ialah membina aplikasi dengan simbol nyahpepijat, menyimpan binari yang dijana untuk nyahpepijat, tetapi jalankan strip -g app.debug -o app.release
dan jalankan binari yang dilucutkan dalam pengeluaran.
Apabila anda menemui contoh yang berkelakuan aneh, anda boleh menyalin versi nyahpepijat penuh ke mesin sasaran dan menjalankannya gdb -ex 'attach $PID' app.debug
. Voila: anda mempunyai simbol penyahpepijatan yang lengkap.
Kemungkinan besar sebab penyusunan aplikasi sekali lagi tidak berfungsi ialah anda mendapat binari baharu dengan simbol berbeza (bandingkan nm app.debug
与 nm app.release
),以及最可能的原因 (如果使用 GCC)是您省略了一些用于构建 app.release
的优化标志,或者您使用了略有不同的源 - 您必须使用完全相同的标志(并添加-g
) dan sumber yang sama untuk kaedah itu berjaya.
Atas ialah kandungan terperinci Bagaimana untuk memuatkan simbol penyahpepijatan untuk proses yang sedang berjalan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!