Saya menggunakan osx 10.8.4 dan telah menginstal gdb 7.5.1 dengan homebrew (motivasi mendapatkan gdb baru dengan fitur baru seperti --with-python dll ...)
Singkat cerita ketika saya menjalankan debug dalam proyek c ++ Eclipse saya mendapatkan:
Error in final launch sequence
Failed to execute MI command:
-exec-run
Error message from debugger back end:
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))
Saya telah mengikuti berbagai saran untuk penandatanganan kode
- https://sourceware.org/gdb/wiki/BuildingOnDarwin
- sebagian http://www.noktec.be/archives/1251 dengan berbagai penyesuaian
Jadi saya melakukan:
- Siapkan sertifikat
- Masuk gdb -> kode tanda -s gdb-cert / usr / local / bin / gdb
Ketika saya menjalankan kembali debugging di Eclipse, saya mendapatkan kesalahan yang sama seperti di atas "(periksa gdb adalah kode yang ditandatangani - lihat taskgated (8))".
Jika saya menyetel kembali gdb ke gdb yang lebih lama (dalam preferensi gdb dari Eclipse) / usr / libexec / gdb / gdb-i386-apple-darwin proses debug berjalan seperti yang diharapkan.
Ada solusi / petunjuk di luar sana?
Terima kasih
Pelle
Jawaban:
Kesalahan ini terjadi karena OSX mengimplementasikan kebijakan akses pid yang memerlukan tanda tangan digital untuk biner untuk mengakses pids proses lainnya. Untuk mengaktifkan akses gdb ke proses lain, pertama-tama kita harus menandatangani kode biner. Tanda tangan ini bergantung pada sertifikat tertentu, yang harus dibuat dan didaftarkan oleh pengguna ke sistem.
Untuk membuat sertifikat penandatanganan kode, buka aplikasi Keychain Access. Pilih menu Keychain Access -> Certificate Assistant -> Create a Certificate…
Pilih nama untuk sertifikat (mis., Gdb-cert), setel Jenis Identitas ke Akar yang Ditandatangani Sendiri, setel Jenis Sertifikat ke Penandatanganan Kode dan pilih Biarkan saya mengganti default. Klik beberapa kali Lanjutkan hingga Anda masuk ke layar Tentukan Lokasi Untuk Sertifikat, lalu atur Rantai Kunci ke Sistem.
Klik dua kali pada sertifikat, buka bagian Kepercayaan, dan atur Penandatanganan Kode ke Selalu Percayai. Keluar dari aplikasi Keychain Access.
Mulai ulang layanan taskgated, dan tanda tangani biner.
sumber http://andresabino.com/2015/04/14/codesign-gdb-on-mac-os-x-yosemite-10-10-2/
Di macOS 10.12 (Sierra) dan versi lebih baru, Anda juga harus melakukannya
Gunakan gdb 7.12.1 atau yang lebih baru Selain itu, cegah gdb menggunakan shell untuk memulai program yang akan di-debug. Anda dapat menggunakan perintah berikut untuk ini di dalam gdb:
Anda juga dapat meletakkan perintah terakhir ini dalam file bernama .gdbinit di direktori home Anda, dalam hal ini perintah akan diterapkan secara otomatis setiap kali Anda memulai gdb
SUMBER: https://sourceware.org/gdb/wiki/BuildingOnDarwin
sumber
macOS Sierra
dengan sertifikat yang ditandatangani sendiri.sudo killall taskgated
adalah kunci untuk memecahkan masalah sayaSaya membuat gdb berfungsi di OSX 10.9 tanpa kode yang ditandatangani seperti ini (dijelaskan di sini ):
Instal gdb dengan macports. (mungkin Anda bisa melewatkannya)
sudo nano /System/Library/LaunchDaemons/com.apple.taskgated.plist
Ubah string opsi dari
-s
menjadi-sp
pada baris 22, kolom 27.Nyalakan ulang komputer.
Gunakan gdb. Jika Anda menginstalnya dengan port mac maka Anda harus menggunakan
ggdb
perintah. Atau buat alias di file konfigurasi Anda:alias gdb='ggdb'
dan gunakan perintah 'gdb'.
sumber
gdb
sebagaisudo
. Sepertinya risiko keamanan yang tidak diperlukan.Saya meningkatkan ke
gdb 8.3
dan tidak dapat membuat semuanya berfungsi. Ini membantu saya:Dimana isinya
gdb.xml
adalah:Saya menemukan solusi ini di sini: https://timnash.co.uk/getting-gdb-to-semi-reliably-work-on-mojave-macos/
Catatan: Tanpa hak saya hanya bisa menjalankan
gdb
dengansudo
.sumber
error: The specified item could not be found in the keychain.
Saya mengalami masalah yang sama dengan GDB. Saya berlari di bawah
Mac OS X 10.8.5
alias Mountain Lion. Saya menggunakan versi GDB7.7.1
.Saya menyusun program pengujian saya dengan perintah berikut:
Jika saya memasukkan perintah
gdb sample.out
, saya mendapatkan pesan kesalahan samar yang sama:Namun pesan kesalahan ini adalah red herring.
Solusi yang saya temukan yang berhasil bagi saya adalah dengan memanggil GDB menggunakan akun superuser:
Itu bekerja dengan baik untuk saya.
Dan sejak saat itu saya bisa menjalankan GDB example.out tanpa menggunakan sudo.
Semoga ini membantu dan berhasil untuk orang lain. RSVP jika tidak.
sumber
Tak satu pun dari ini berhasil untuk saya dan saya harus pergi dengan jangka panjang. Berikut adalah daftar lengkap langkah-langkah yang telah saya lakukan untuk membuatnya berfungsi.
Sayangnya, sertifikat sistem memberi saya
Unknown Error = -2,147,414,007
yang sangat membantu, jadi saya harus mencari solusi.KeyChain Assistant -> Create certificate ->
Pilih
login
,gdb-cert
,Code Signing
Salin / pindahkan sertifikat ke rantai kunci Sistem (masukkan kata sandi)
gdb-cert
) klikGet info
->Trust Always
startup-with-shell
Masuk di konsol:
set startup-with-shell off
Ingat konfigurasi:
echo "set startup-with-shell off" >> ~/. gdbinit
Pergi ke
System Preferences
->Users & Groups
->Unlock it
->Login Options
->Network Account Server
->Join
->Unlock it
->Edit
(menu) ->Enable Root User
sudo killall taskgated
codesign -fs gdb-cert "$(which gdb)"
PS. Saya akhirnya menggunakan
lldb
karena itu hanya berfungsi ( tutorial )sumber
Bagi siapa saja yang menggunakan Sierra 10.12.6 (dan di atasnya) dan Homebrew,
/usr/local/bin/gdb
ini adalah tautan simbolis ke/usr/local/Cellar/gdb/8.0/bin/gdb
(atau versi apa pun, mis.8.0.1
).Anda perlu memberi kode pada tautan dan target:
Atau, jika Anda telah
greadlink
(menginstal melaluibrew install coreutils
):sumber
Saya bertanya-tanya apakah perubahan global dalam jawaban dengan suara terbanyak di sini memiliki beberapa konsekuensi yang tidak diinginkan.
Daripada mengaktifkan konvensi Tiger lama, taskgated memungkinkan kode yang ditandatangani untuk dijalankan. Jadi mungkin lebih baik untuk mendapatkan sertifikat yang ditandatangani untuk gdb, mirip dengan jawabannya di sini .
Setelah ini saya bisa
sudo
menggunakan gdb. Jika Anda perlu menggunakan gdb w / o sudo maka mungkin tautan ini akan membantu , disclaimer, saya belum mencobanya karena menggunakansudo
adalah solusi yang ok untuk saat ini`.sumber
Ini mungkin tidak berhubungan. Anda dapat menggunakan lldb di macos sebagai ganti gdb. Anda tidak perlu repot untuk menginstal gdb.
lldb ( http://lldb.llvm.org ) sudah diinstal secara default di High Sierra
sumber
Saya dapat merekomendasikan untuk mengikuti inti ini: https://gist.github.com/gravitylow/fb595186ce6068537a6e9da6d8b5b96d#file-codesign_gdb-md
Dengan trik untuk mengatasi:
unknown error = -2,147,414,007
selama Pembuatan Sertifikat dijelaskan di sini: https://apple.stackexchange.com/a/309123Catatan:
Path untuk gdb yang diinstal sebagai
homebrew
paket harus seperti ini:/usr/local/Cellar/gdb/9.2/bin/gdb
Dan
csrutil enable --without debug
akan menimbulkan pesan tentangrequesting unsupported configuration
, seperti di sini: https://totalfinder.binaryage.com/system-integrity-protectionUji:
sumber
gdb 8.3;
Masalah saya sama dengan orang di atas, diselesaikan oleh
sumber