Pertanyaan Memohon fungsi saat debugging dengan Visual Studio 2005?


Inilah sesuatu yang saya tahu mungkin mungkin tetapi saya tidak pernah berhasil melakukannya
Di VS2005 (C ++), Sementara debugging, untuk dapat memanggil fungsi dari kode yang saya debugging.
Fitur ini kadang-kadang penting ketika debugging struktur data kompleks yang tidak dapat dieksplorasi dengan mudah hanya dengan menggunakan kemampuan normal dari jendela jam.
Jendela arloji tampaknya memungkinkan pemanggilan fungsi penulisan tetapi setiap kali saya mencobanya, itu memberi saya satu kesalahan atau lainnya.

Error: symbol "func" not found
Error: argument list does not match function
Error: member function not present

Apakah ada yang pernah berhasil membuat ini berfungsi dengan baik? Apa yang kulewatkan di sini?

Edit: jelas, fungsi yang disebut harus menjadi simbol yang ada dalam lingkup saat ini debugger berada.


8
2017-11-07 02:18


asal


Jawaban:


Ok, Inilah yang saya temukan
CXX0040 berarti "The C expression evaluator does not support implicit conversions involving constructor calls."
CXX0047 berarti "Overloaded functions can be called only if there is an exact parameter match or a match that does not require the construction of an object."

Jadi gabungan itu berarti bahwa Jika saya ingin memanggil fungsi, tidak ada argumen yang harus memiliki konversi implisit dan tidak ada argumen yang perlu konstruksi.
"Konversi implisit" dalam konteks ini tampaknya mencakup hal-hal sepele seperti konversi 'String' untuk 'const String&'.
"konstruksi" tampaknya termasuk konstruksi salinan yang sepele. jadi melintas dengan nilai apapun yang bukan tipe primitif akan menghasilkan kesalahan.

Jadi ini pada dasarnya meninggalkan fungsi yang hanya mengambil tipe atau pointer primitif.
Saya baru saja menguji teori ini dengan sukses.

Jadi, jika Anda ingin dapat memanggil metode dari jendela tonton, tambahkan kelebihan yang hanya menggunakan petunjuk dan primitif dan di jendela tonton, berikan argumen yang tepat. Untuk meloloskan objek yang tidak primitif lulus alamatnya.


10
2017-11-07 02:45



Jendela tonton dibatasi oleh konteks di mana kode Anda saat ini, misalnya, ketika kode Anda memasukkan fungsi dan Anda mencoba mengakses fungsi lain yang disembunyikan dari ruang lingkup fungsi Anda saat ini, itu tidak akan berfungsi.

Jika Anda menjalankan fungsi di jendela tonton, pastikan bahwa itu terlihat dan dapat diakses dari lingkup saat ini.


0
2017-11-07 02:21



Sepengetahuan saya, Anda tidak dapat mengeksekusi kode dari jendela Tontonan saat melakukan debug pada C ++ yang tidak dikelola. Ini berfungsi untuk C # (dan mungkin VB.NET dan dikelola C ++, tapi saya tidak positif tentang itu). Jadi kemungkinan itu memungkinkan karena berfungsi untuk beberapa bahasa, tetapi tidak yang lain.


0
2017-11-07 02:22



Kami menemukan ini bekerja dalam cara yang sangat memukul dan merindukan. Beberapa fungsi yang sangat sederhana (termasuk fungsi anggota) bekerja, biasanya pengambil properti sederhana. Fungsi lain yang lebih kompleks tidak berfungsi dan memberikan kesalahan.

Saya tidak pernah bisa membedakan aturan yang tepat ...


0
2017-11-07 02:34



Saya belum menguji ini, tapi saya selalu berpikir itu adalah apa jendela langsung untuk (mengeksekusi kode)

Cameron


0
2017-11-07 03:23



Ini adalah jendela "Segera" yang Anda inginkan. Dan Anda terbatas pada apa yang terlihat dari tempat breakpoint Anda saat ini. Variabel lokal, dan fungsi pada kelas itu (atau global)


0
2017-11-07 03:55



Menurut pengalaman saya, ada beberapa kekurangan dengan jendela langsung. Anda tidak dapat memanggil fungsi anggota kelas Anda jika kelas berasal dari DLL yang berbeda, tetapi mendapatkan pesan kesalahan yang menyesatkan. Jika ada sesuatu dalam DLL yang sama (misalnya dengan menghubungkan secara statis dalam semua hal lainnya), anggota pemanggil cukup dapat diandalkan. Tetapi hal-hal yang rumit mungkin atau tidak dapat berfungsi, seperti yang disebutkan oleh orang lain.


0
2017-11-07 08:55