Pengantar: Memahami Kebutuhan Demangling C++
Saat menelusuri file biner atau melakukan debugging aplikasi C++ di Linux, pengembang kerap menemukan string simbol yang terlihat acak dan sulit dipahami manusia. Rangkaian karakter aneh tersebut sejatinya merupakan hasil dari proses name mangling—mekanisme yang diterapkan kompilator C++ untuk membedakan signature fungsi akibat fitur function overloading serta penataan namespace. Panduan teknis ini mengulas tuntas cara kerja utilitas c++filt dalam mendekode simbol ter-mangle kembali ke deklarasi fungsi aslinya, lengkap dengan skenario implementasi langsung di terminal.
Menyiapkan Utilitas binutils dan Membedah Simbol Tunggal
Untuk menyediakan perkakas biner dasar termasuk utilitas c++filt, pasang paket yang dibutuhkan via manajer paket dengan mengeksekusi apt-get update -qq && apt-get install -y binutils.

Pastikan paket telah terpasang dengan benar dan periksa versinya melalui perintah c++filt --version | head -n 2.
Secara fungsional, c++filt bertindak sebagai penerjemah balik (demangler) yang mentransformasikan identitas terenkripsi kompilator C++ menjadi representasi fungsi, kelas, maupun parameter yang mudah dibaca oleh programmer.
⚙️ [Parameter Kunci]
-_, --strip-underscore : Membuang karakter garis bawah awal sebelum proses demangling berjalan.-n, --no-strip-underscore : Mempertahankan garis bawah di awal simbol tanpa memotongnya.-p, --no-params : Menyembunyikan rincian argumen/parameter dan hanya menampilkan nama fungsinya.-t, --types : Mengaktifkan translasi tipe data internal di samping simbol fungsi.-s, --format : Memilih skema spesifik format demangling berdasarkan standar ABI kompilator tertentu.

Uji dekode simbol dasar tanpa parameter menggunakan perintah c++filt _Z1fv.
Utilitas ini langsung memecahkan kode tersebut menjadi signature fungsi murni f().

Untuk mengurai simbol yang mengemas struktur hierarki namespace beserta tipe data argumen, jalankan c++filt _ZN4Math3addEii.
Hasil decoding menampilkan relasi lingkup Math::add(int, int) secara gamblang, mengekspos namespace induk sekaligus kedua parameter bertipe integer.

Eksperimen Name Mangling: Integrasi Kompilator dan Perintah nm
Konfigurasikan lingkungan kompilasi C++ di sistem Ubuntu dengan menjalankan apt-get update -qq && apt-get install -y build-essential.

Buatlah sebuah modul C++ sederhana yang mengimplementasikan overloading fungsi di dalam ruang lingkup namespace dengan mengeksekusi cat << 'EOF' > /tmp/demo.cpp.

Kompilasi berkas C++ tersebut menjadi file objek siap-link menggunakan perintah g++ -c /tmp/demo.cpp -o /tmp/demo.o.

Untuk menginspeksi tabel simbol hasil bentukan kompilator pada file objek, jalankan nm /tmp/demo.o | grep add.
Perhatikan bahwa fungsi add telah mengalami perubahan nama menjadi _ZN10Calculator3addEii dan _ZN10Calculator3addEdd demi membedakan tipe parameter int dan double.

Alihkan keluaran perintah nm ke utilitas demangler secara berantai dengan menjalankan nm /tmp/demo.o | c++filt | grep add.
Pipa pemrosesan ini secara otomatis menerjemahkan kembali simbol-simbol rumit tadi menjadi penamaan fungsi yang jelas, yakni Calculator::add(int, int) serta Calculator::add(double, double).

Menangani Simbol Template Kompleks Melalui Mekanisme Pipa
Tipe data generik dari STL sering kali menghasilkan signature biner yang sangat panjang. Buat skenario pengujian template class melalui cat << 'EOF' > /tmp/template_demo.cpp.

Lakukan kompilasi berkas template tersebut menjadi artefak biner dengan g++ -c /tmp/template_demo.cpp -o /tmp/template_demo.o.

Telusuri simbol yang terkait dengan fungsi anggota print melalui nm /tmp/template_demo.o | grep print.
Kombinasi std::vector dan std::string menghasilkan simbol mangled berlapis yang nyaris mustahil dibaca secara visual tanpa alat bantu.

Gunakan kekuatan pipeline Unix untuk menguraikan kembali hierarki template tersebut dengan menjalankan nm /tmp/template_demo.o | c++filt | grep print.
Output yang dihasilkan merestorasi seluruh struktur tipe data aslinya secara transparan, memperlihatkan instansiasi kelas template beserta parameternya secara presisi.

Optimalisasi Parsing: Opsi -p dan Otomatisasi Log Error
Untuk membedah signature fungsi secara menyeluruh termasuk rincian tipe argumennya, jalankan c++filt _ZN10Calculator3addEii.
Perintah standar ini menghasilkan output lengkap yang memuat nama kelas, fungsi, dan daftar tipe parameter (int, int).

Jika fokus analisis hanya tertuju pada identitas fungsi tanpa membutuhkan daftar parameternya, gunakan opsi ringkas c++filt -p _ZN10Calculator3addEii.
Parameter -p menyaring argumen fungsi dan menyajikan representasi bersih berupa Calculator::add.

Aktifkan interpretasi tipe secara eksplisit dengan memasukkan opsi -t lewat c++filt -t _ZN10Calculator3addEii.
Mode ini memastikan integritas struktur simbol tetap terpelihara dan menghasilkan deklarasi Calculator::add(int, int).

Dalam skenario operasional nyata, c++filt dapat membaca teks log utuh dan hanya mengonversi bagian simbol C++ tanpa merusak kalimat di sekitarnya, seperti dicontohkan melalui echo 'Fatal error in _ZN10Calculator3addEii at runtime' | c++filt.
Pola integrasi ini sangat efektif untuk mengotomatisasi pemfilteran berkas stack trace dan log error produksi agar dapat dibaca langsung oleh tim pengembang.

Mekanisme name mangling merupakan pilar penting dalam kompilator C++ modern untuk mengelola fitur-fitur berorientasi objek di level biner. Berbekal utilitas c++filt, tugas menelusuri simbol kriptik saat memecahkan masalah tautan (linker errors) atau menganalisis crash dump di Linux kini menjadi jauh lebih cepat dan terstruktur.