Jadual Kandungan
Kata Pengantar: " >Kata Pengantar:
Pengenalan plot:" >Pengenalan plot:
Contoh 1: Pemulaan penunjuk gagal" >Contoh 1: Pemulaan penunjuk gagal
示例二:另一个指针问题" >示例二:另一个指针问题
示例三:内存溢出" >示例三:内存溢出
Kesimpulan" >Kesimpulan
Rumah Tutorial sistem LINUX Perkongsian praktikal analisis fail coredump pembangunan Linux

Perkongsian praktikal analisis fail coredump pembangunan Linux

Feb 05, 2024 pm 01:10 PM
linux tutorial linux sistem linux limpahan timbunan arahan linux skrip shell embeddedlinux lesen yang bagus Bermula dengan linux pembelajaran linux

Kata Pengantar:

Dalam pembangunan Linux terbenam, menganalisis fail coredump ialah kaedah biasa dan kami selalunya boleh mencari tutorial penggunaan yang berkaitan di Internet. Walau bagaimanapun, terdapat beberapa artikel tentang cara menganalisis fail coredump bagi aplikasi berbilang benang. Hari ini saya akan berkongsi beberapa kes yang saya temui dalam penggunaan sebenar, dengan harapan dapat memberikan sedikit bantuan kepada semua orang. Disebabkan oleh pengehadan kod dan ruang, saya hanya akan menerangkan masalah yang saya rasa lebih tersendiri, dan menggunakan pemikiran rangka kerja untuk menyelesaikan banyak situasi fail coredump yang dihadapi.

Penulis: Nurani masih wujud

Keizinan cetak semula dan penonton: Selamat datang untuk mengikuti akaun awam WeChat: Hamebayashi-kun

Atau tambah WeChat peribadi pengarang: become_me


Pengenalan plot:

Semasa menyahpepijat fungsi, saya menghasilkan beberapa fail coredump dan ralat program yang berbeza berlaku. Melalui peluang ini, saya ingin berkongsi dengan semua orang. Secara umumnya, fail coredump mungkin dijana disebabkan oleh penunjuk nol, tatasusunan di luar sempadan, berbilang keluaran oleh berbilang benang, limpahan tindanan, dsb. Di sini saya telah memilih beberapa masalah yang mewakili berdasarkan situasi yang saya hadapi dan berkongsi dengan anda beberapa penyelesaian mudah.

Pertama, untuk nyahpepijat sewajarnya, kita perlu menggunakan alat gdb. Sebelum mula menganalisis fail coredump, anda perlu biasa dengan pelbagai arahan gdb. Di bawah ialah dua artikel yang saya tulis sebelum ini tentang penyahpepijatan gdb:

Satu artikel untuk bermula dengan penyahpepijatan gdb di bawah Linux (1)

Satu artikel untuk bermula dengan penyahpepijatan gdb di bawah Linux (2)

Oleh itu, artikel ini tidak akan menerangkan secara terperinci tentang kandungan ini, tetapi hanya menumpukan pada operasi sebenar yang perlu kami lakukan semasa menganalisis fail coredump.

Pertama, kita perlu nyahpepijat menggunakan fail boleh laku dengan maklumat nyahpepijat.

gdb executable_file coredump_file
Salin selepas log masuk

Contoh 1: Pemulaan penunjuk gagal

Perkara pertama selepas masuk ialah menggunakan arahan bt untuk melihat maklumat tindanan

Perkongsian praktikal analisis fail coredump pembangunan Linux

Dalam fail coredump ini, kita boleh melihat dengan mudah bahawa terdapat perbezaan data yang jelas antara alamat masuk fungsi dan fungsi ahli kelas. Kita boleh membuat kesimpulan secara langsung pada bahagian yang jelas dan kemudian menyemak butirannya.

f  n 
Salin selepas log masuk

Pilih bingkai mengikut nombor bingkai Nombor bingkai boleh dilihat melalui arahan bt.

我们查看对应的第 17帧的堆栈信息

Perkongsian praktikal analisis fail coredump pembangunan Linux

通过上面截图我们可以看到在第17帧中 this这个类实体化的地址出现了问题。

为了对比我们又查看了对应20帧的堆栈信息以及对应帧的详细信息

Perkongsian praktikal analisis fail coredump pembangunan Linux

然后我们需要确认该指针是什么什么出现问题的,进行第20帧数据的详细查看。其中我们用p命令查看该类下面的对应的和17帧this的关系,确认gyro_在这个函数执行的时候,地址是否正确。

Perkongsian praktikal analisis fail coredump pembangunan LinuxPerkongsian praktikal analisis fail coredump pembangunan Linux

从上面来看在此处函数执行的时候,对应的gyro的地址还没有变成错误的0x1388。

从这里我们基本可以确认到,函数从 第20帧对应位置执行之后再到17帧的函数的时候,执行函数的地址发生了改变 然后开始进入校对代码的环节。

这个时候校对不是看代码执行的具体情况,因为发生问题的部分已经是被修改了指针地址。所以我们需要从全局去看这个实体类被进行实体化和释放操作的地方。

最终找到了一个出现线程调用先后顺序导致变量没有准备好,出现的死机情况。

示例二:另一个指针问题

进入之后第一件事情 使用 bt命令查看堆栈信息

这个coredump文件在使用bt命令之后发现 此处的堆栈信息看上去都很正常,无法显示出代码在哪里了出现了问题。

Perkongsian praktikal analisis fail coredump pembangunan Linux

这个时候我们就要考虑多线程时候,堆栈信息不一定直接捕获到对应线程,我们需要打开所有线程里面的堆栈信息。

thread apply all bt
Salin selepas log masuk

除了bt大家也可以打印自己需要的其他信息

thread apply all command //所有线程都执行命令
Salin selepas log masuk
Perkongsian praktikal analisis fail coredump pembangunan Linux

对应打印出所有线程的堆栈信息之后,我们就进行一点点查看,但是如果你的代码定义了 信号处理函数,例如我使用了 handle_exit进行处理,然后我就在所有线程堆栈信息里面去搜索对应最后面信号处理的函数,再往回查看程序执行的过程。

此时我们发现led一个实体化类的的初始地址出现了问题,最后校验代码,发现了这个bug。

示例三:内存溢出

进入之后第一件事情 使用 bt命令查看堆栈信息

此时发现当前堆栈信息也无法进行定位到问题。

Perkongsian praktikal analisis fail coredump pembangunan Linux

Kemudian kami menggunakan thread apply all bt tetapi kami tidak melihat fungsi hand_exit yang sepadan pada kali pertama

Kemudian kami menggunakan info locals untuk melihat maklumat pembolehubah setempat yang disimpan

Perkongsian praktikal analisis fail coredump pembangunan Linux

info f addr打印通过addr指定帧的信息。info argsCetak nilai pembolehubah fungsi.

info locals Cetak maklumat pembolehubah setempat.

info catchCetak maklumat pengendalian pengecualian dalam fungsi semasa.

Pembolehubah setempat juga tidak mempunyai sebarang petunjuk jelas tentang ralat penunjuk atau data di luar sempadan.

Jadi kami menggunakan arahan p untuk mencetak maklumat pembolehubah yang disimpan dalam maklumat bingkai.

Perkongsian praktikal analisis fail coredump pembangunan Linux

Dengan mencetak maklumat berubah-ubah ini yang kami fikir mempunyai kadar ralat yang tinggi, ia boleh membantu kami membuat pertimbangan. Walau bagaimanapun, tiada cara untuk mengesahkan lokasi masalah dengan percetakan ini.

Kemudian kami melihat semula maklumat tindanan semua benang. Akhirnya, saya melihat parameter tidak normal Nilai ini sangat besar dan agak tidak normal.

Kemudian kami menyemak lokasi kod sumber yang sepadan Kerana ia adalah perpustakaan C++, kami terus melihat kod di lokasi kompilasi.

Perkongsian praktikal analisis fail coredump pembangunan Linux

Lihat maklumat yang dipaparkan dalam bingkai 7 dahulustl_algobase.h:465

Selepas membuka lokasi kod yang sepadan, kami mendapati bahawa parameter **__n** ialah parameter untuk jumlah ruang yang diperuntukkan.

Perkongsian praktikal analisis fail coredump pembangunan Linux

Lihat sekali lagi sebelum dan selepas pelaksanaan stl_vector.h:343

Perkongsian praktikal analisis fail coredump pembangunan Linux

__n yang diluluskan sekarang adalah lebih kurang nilai unit lebih daripada 100 juta, dan lokasi kerja sebenar kod tersebut tidak memerlukan peruntukan ruang yang begitu besar. Oleh itu, disahkan bahawa terdapat masalah di sini Selepas membandingkan lokasi pelaksanaan kod dan penggunaan global pembolehubah yang sepadan, pada dasarnya ditentukan bahawa baris gilir digunakan oleh berbilang benang dan kunci tidak digunakan dengan betul, mengakibatkan berbilang. benang dalam keadaan yang melampau, operasi output dan input Akan dijalankan di kawasan yang sama, menyebabkan kod ranap kali ini.

Kesimpulan

Ini adalah analisis fail coredump dalam projek yang saya kongsikan Jika anda mempunyai idea dan keperluan yang lebih baik, anda dialu-alukan untuk menambah saya sebagai rakan untuk berkomunikasi dan berkongsi.

Selain arahan yang digunakan dalam artikel saya, anda juga boleh menggunakan lebih banyak arahan untuk membantu penyahpepijatan gbd untuk menyemak fail coredump kami. Contohnya, lihat kod pemasangan dan sebagainya. Masih terdapat banyak artikel tentang arahan penyahpepijatan gdb di Internet Anda juga boleh membaca artikel lain untuk membantu anda menggunakan arahan tersebut.

Atas ialah kandungan terperinci Perkongsian praktikal analisis fail coredump pembangunan Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Seni Bina Linux: Melancarkan 5 Komponen Asas Seni Bina Linux: Melancarkan 5 Komponen Asas Apr 20, 2025 am 12:04 AM

Lima komponen asas sistem Linux adalah: 1. Kernel, 2. Perpustakaan Sistem, 3. Utiliti Sistem, 4. Antara Muka Pengguna Grafik, 5. Aplikasi. Kernel menguruskan sumber perkakasan, Perpustakaan Sistem menyediakan fungsi yang telah dikompilasi, utiliti sistem digunakan untuk pengurusan sistem, GUI menyediakan interaksi visual, dan aplikasi menggunakan komponen ini untuk melaksanakan fungsi.

Tutorial Penggunaan Terminal VSCode Tutorial Penggunaan Terminal VSCode Apr 15, 2025 pm 10:09 PM

VSCODE Terminal terbina dalam adalah alat pembangunan yang membolehkan arahan dan skrip berjalan dalam editor untuk memudahkan proses pembangunan. Cara Menggunakan VSCode Terminal: Buka terminal dengan kekunci pintasan (Ctrl/Cmd). Masukkan arahan atau jalankan skrip. Gunakan hotkeys (seperti Ctrl L untuk membersihkan terminal). Tukar direktori kerja (seperti perintah CD). Ciri -ciri lanjutan termasuk mod debug, penyelesaian coretan kod automatik, dan sejarah arahan interaktif.

Cara memeriksa alamat gudang git Cara memeriksa alamat gudang git Apr 17, 2025 pm 01:54 PM

Untuk melihat alamat repositori Git, lakukan langkah -langkah berikut: 1. Buka baris arahan dan navigasi ke direktori repositori; 2. Jalankan perintah "Git Remote -V"; 3. Lihat nama repositori dalam output dan alamat yang sepadan.

Di mana untuk menulis kod di vscode Di mana untuk menulis kod di vscode Apr 15, 2025 pm 09:54 PM

Kod penulisan dalam Kod Visual Studio (VSCode) adalah mudah dan mudah digunakan. Hanya pasang VSCode, buat projek, pilih bahasa, buat fail, tulis kod, simpan dan jalankannya. Kelebihan vscode termasuk sumber lintas platform, bebas dan terbuka, ciri-ciri yang kuat, sambungan yang kaya, dan ringan dan cepat.

Apr 16, 2025 pm 07:39 PM

Walaupun Notepad tidak dapat menjalankan kod Java secara langsung, ia dapat dicapai dengan menggunakan alat lain: menggunakan pengkompil baris arahan (Javac) untuk menghasilkan fail bytecode (fileName.class). Gunakan Java Interpreter (Java) untuk mentafsir bytecode, laksanakan kod, dan output hasilnya.

Apakah tujuan utama Linux? Apakah tujuan utama Linux? Apr 16, 2025 am 12:19 AM

Penggunaan utama Linux termasuk: 1. Sistem Operasi Pelayan, 2. Sistem Terbenam, 3. Linux cemerlang dalam bidang ini, menyediakan kestabilan, keselamatan dan alat pembangunan yang cekap.

Cara menjalankan luhur setelah menulis kod Cara menjalankan luhur setelah menulis kod Apr 16, 2025 am 08:51 AM

Terdapat enam cara untuk menjalankan kod di Sublime: melalui hotkeys, menu, sistem membina, baris arahan, menetapkan sistem binaan lalai, dan arahan membina adat, dan menjalankan fail/projek individu dengan mengklik kanan pada projek/fail. Ketersediaan sistem membina bergantung kepada pemasangan teks luhur.

Perintah terminal vscode tidak dapat digunakan Perintah terminal vscode tidak dapat digunakan Apr 15, 2025 pm 10:03 PM

Punca dan penyelesaian bagi arahan terminal terminal Vs tidak tersedia: Alat yang diperlukan tidak dipasang (Windows: WSL; MacOS: Xcode Command Line Tools) Konfigurasi jalan adalah salah (tambahkan fail yang boleh dilaksanakan untuk pemboleh ubah persekitaran PATH) Adakah Konfigurasi Terminal (Pasang semula atau Kemas Kini) Ros

See all articles