Xcode debugger tidak mencetak objek dan menunjukkan nol, padahal sebenarnya tidak

165

Xcode menunjukkan kesalahan ketika mencoba untuk mencetak objek po <objectName>, tetapi hanya untuk satu proyek.

Tangkapan layar

galat: Tidak dapat mematerialisasi struct: ukuran variabel <varName> tidak setuju dengan ukuran ValueObject yang Galat dalam Menjalankan, tidak dapat MempersiapkanToExecuteJITExpression

Xcode debugger juga menunjukkan SEMUA objek sebagai nil( selfdikecualikan), ketika mereka tidak ( NSLogmenampilkan output yang benar, seperti yang terlihat pada gambar). Saya tidak tahu apa yang salah dengan proyek ini. Setiap proyek lainnya berfungsi dengan baik.

Tahu apa itu? (Membersihkan proyek tidak berpengaruh.)

Binarian
sumber
Bagi saya itu terdengar seperti semacam masalah pointer, tapi saya yakin sepenuhnya pasti jujur. Apa yang Anda coba lakukan / capai?
user2967030
3
Kesalahan terjadi pada setiap objek proyek itu. Bahkan NSStringdibuat satu baris di atas breakpoint!
Binarian
1
Seperti yang dikatakan dalam pertanyaan, pembersihan tidak mengubah apa pun; (, tapi terima kasih telah mencoba. Menambahkan pesan kesalahan.
Binarian
3
Apakah Anda yakin Anda membangun tanpa optimasi? (
-O0
1
Optimalisasi dapat diatur tidak hanya dalam pengaturan proyek tetapi juga dalam target. Ada m terjebak :(
basil

Jawaban:

269

Apakah Anda yakin tidak dalam "mode rilis"?

Jika Anda ingin melihat nilai variabel Anda harus berada di "Mode debug" (klik pada nama proyek Anda di sudut kiri atas dekat tombol start / stop, lalu "Edit skema ...", lalu "Jalankan" pengaturan, lalu " Tab Info ", lalu" Build Configuration ". Di sini atur" Debug ". Jika berada di" Release "maka yang Anda lihat semua nol).

Mick
sumber
3
Saya hanya memiliki satu konfigurasi, bagaimana cara mengubah konfigurasi sehingga seperti debug configuration?
Binarian
2
Ah ok, saya membuat proyek kosong dan sekarang bisa melihat semua perbedaan dalam Build Settings, properti penyebaran Strip debug symbols during copydiatur ke YA.
Binarian
16
@ Alex1987 Saya mengatur Strip debug symbols during copyke NOdan Optimization Levelke None -O0dalam proyekBuild Settings
Binarian
32
Sayangnya, dalam situasi tertentu lldb telah melakukan ini ketika dalam mode debug, dengan optimasi tidak aktif, dan simbol debugging hadir. Saatnya mengunjungi bug report.apple.com
ctpenrose
4
Punya masalah yang sama - Level optimisasi adalah "Tidak Ada". Masalahnya adalah bahwa Link-Time Optimization (LTO) diatur ke "Ya" juga untuk mode debug.
pi3
38

Saya telah menetapkan "Tingkat Optimasi" untuk konfigurasi Debug ke "Tidak Ada" dan ini memecahkan masalah.

Leszek Zarna
sumber
2
Lucu, itu tidak berhasil. Saya melakukan yang sebaliknya. Saya beralih ke Fastest, Smallest[-Os]dan itu berhasil.
Nate Hat
Banyak saran yang berbeda, tetapi yang ini (mengatur optimasi Debug ke Tidak Ada) memperbaikinya untuk saya.
Dejal
29

Pastikan bahwa Sanitizer Alamat dimatikan dalam pengaturan Skema Anda. Address Sanitizer tidak berfungsi dengan baik dengan debugger.

  1. Pergi ke Edit Skema (Produk >> Skema >> Skema Edit), pilih Jalankan, dan pergi ke tab Diagnostics.
  2. Pastikan "Aktifkan Sanitizer Alamat" tidak aktif.

masukkan deskripsi gambar di sini

KIO
sumber
4
Ini solusi untuk saya. Ternyata ada banyak alasan mengapa hal ini bisa terjadi.
manroe
16

Sepertinya setiap orang punya solusi sendiri.

Bagi saya, saya menggunakan Objective-Cdan Swiftpada saat yang sama.

Pertama-tama, buka TARGETS -> Build Settingsdan caricode generation

Anda akan menemukan Apple LLVM 6.0 dan Swift Compiler

Ubah Optimization Levelsemuanya menjadi None, lalu Debug, Anda mungkin menemukan nilainya tidaknil

Hebatnya begitu Anda bisa melihat nilainya, Anda memecahkan masalah ini secara permanen, lalu Anda bisa mengubahnya Optimization Levelseperti semula.

LeiHao
sumber
11

Ada cara lain ini bisa terjadi. Bagi saya itu karena nilai "Other C Flags" ditetapkan ke "-O2", bahkan untuk build debug. Menonaktifkan ini untuk proses debug menyelesaikan masalah.

ThomasW
sumber
9

Output debug yang difilter

Bagi saya, Xcode memfilter output debugger. Pastikan pengaturan output Anda adalah Debugger Output atau All Output

Secara curam hanya dengan rendah hati
sumber
6

Saya baru saja mengalami masalah ini dan menemukan bahwa itu karena Deployment Postprocessing = YESdi Pengaturan Bangun.

Mengubah ini untuk NOmemperbaikinya, seperti terlihat pada tangkapan layar di bawah ini:

masukkan deskripsi gambar di sini

Versi Xcode: 6.0.1 (6A317) pada OSX 10.9.5

Luke
sumber
5

Saya baru saja mengalami masalah yang sama: Pada satu titik tiba-tiba Xcode debugger mencetak beberapa jenis objek terutama NSStrings sebagai (nol) meskipun mereka diinisialisasi dengan nilai. Dicetak melalui

NSLog(@"String value: %@", myString);

nilai yang benar untuk objek ditampilkan.

Membingungkan! Memecahkan masalah agak mudah: Saya hanya mematikan Xcode dan menyalakan kembali komputer saya. Setelah saya restart Xcode semuanya berfungsi dengan baik lagi :).

Torsten Barthel
sumber
5

Pastikan Link-Time Optimization = Nountuk mode debug di Bangun Pengaturan.

llama591
sumber
Saya hanya memenuhi masalah ini di Xcode 8 hanya pada pengaturan kerangka kerja dinamis saya! Thx
vmeyer
3
  1. Hapus Data Berasal
  2. Cukup Xcode / Mulai ulang
  3. Proyek Bersih

Itu yang saya butuhkan.

TMin
sumber
2

Solusi di sini juga akan memperbaiki bug di mana Anda melihat error: <EXPR>:1:1: error: use of unresolved identifiersetiap kali Anda mencoba povariabel.

Bagi saya solusinya adalah pergi ke Build Settingsdan mencari Optimization Leveldan memastikan setiap Debugpengaturan diatur ke None.

Kevin Xu
sumber
Ini benar-benar memperbaikinya untuk saya. Adakah yang tahu kerugiannya untuk menonaktifkan pengaturan?
Jasper
1

Pergi ke "Other C Flags" di pengaturan build dan atur nilai debug dari -o2 ke -O0

Syaikh Syaikh
sumber
0

Saya telah mengalami ini juga dan ketika saya menemukan saya dalam mode rilis saya beralih ke debug ... tidak ada perbaikan. Ternyata saya harus melakukan bersih dulu (cmd + shift + k).

Jadi saya pikir apa yang terjadi adalah bahwa setelah dibangun dalam mode rilis tidak semuanya dikompilasi ulang dalam pengembangan dan lldb tidak dapat membaca simbol dengan benar. Setelah membersihkan dan mengkompilasi ulang di dalam mengembangkan itu bekerja untuk saya.

Spencer Hall
sumber
-3

Kenyataannya adalah bahwa sistem harus bekerja di luar kotak dan tidak karena tautan ke banyak kuantitas pengaturan yang berbeda, ke titik di mana hal-hal dapat bekerja untuk Anda, atau tidak.

Mengapa sistem tidak selalu memungkinkan untuk melakukan debug ketika dalam mode debug adalah misteri yang hanya dapat dijawab oleh Apple (jika mereka peduli, yang mana saya ragu mereka lakukan).

Lagi pula, perbedaan antara debug / non-debug adalah tabel ekstra dengan metadata yang hanya mengisi ruang memori / disk.

Jika Anda melakukan kompilasi terhadap simulator atau perangkat secara langsung, Anda tidak akan peduli dengan megabyte tambahan itu.

Jadi kita perlu menjalankan loop ekstra untuk hanya melakukan hal yang sangat mendasar dan sederhana yang semua yang saya tahu sejak abad lalu baik-baik saja.

Dan untuk menambahkan, bagi saya apa yang berhasil berubah pada "Debug" Link-Time Optimization dari "Monolithic" menjadi "No" (xcode 8).

baik
sumber
Xcode = Tidak ada manajer paket di luar kotak, autocomplete dan fitur-fitur lain yang bekerja sesuai keinginan, waktu kompilasi sangat besar, dll.
zirinisp