Ambil fungsi berikut:
DataTable go() {
return someTableAdapter.getSomeData();
}
Ketika saya menetapkan breakpoint dalam fungsi ini, apakah ada kemungkinan untuk memeriksa nilai yang dikembalikan? go()
secara langsung digabungkan ke datagrid di .aspx
halaman.
Satu-satunya cara untuk memeriksa datatable yang dikembalikan adalah dengan menggunakan variabel sementara. Namun, itu agak merepotkan. Apakah tidak ada cara lain?
c#
visual-studio
visual-studio-debugging
doekman
sumber
sumber
Jawaban:
Tidak yang saya tahu. Catatan bahwa jika Anda melakukan menambahkan variabel, itu akan bisa dihapus oleh compiler dalam rilis membangun pula ...
Pembaruan: Fungsi ini telah ditambahkan ke VS2013 . Anda dapat melihat nilai kembali di jendela autos atau digunakan
$ReturnValue
di jendela arloji / langsung.Nilai hanya dapat dilihat secara langsung setelah kembali dari fungsi, sehingga cara termudah untuk mengaksesnya adalah dengan meletakkan breakpoint pada pemanggilan fungsi dan melangkahi (F10) panggilan.
Pembaruan untuk VS2015: boo! sayangnya, sepertinya tidak ada di VS2015 (devenv v14)
Pembaruan untuk VS2017: itu kembali. (devenv v15)
sumber
Ini dapat dilakukan di Visual Studio 2013 dengan CLR 4.5.1 sesuai dengan situs umpan balik pelanggan . Itu tidak tersedia di versi sebelumnya untuk C #.
(Visual Studio 2008 dan sebelumnya mendukungnya untuk VB.NET. Selalu tersedia untuk pengembang C / C ++.)
sumber
Saya setuju bahwa ini adalah hal yang sangat berguna untuk dimiliki: tidak hanya melihat nilai balik metode sebelum melangkah keluar, tetapi juga melihat nilai balik metode yang baru saja saya melangkahi. Saya menerapkannya sebagai bagian dari ekstensi komersial ke Visual Studio yang disebut " OzCode ".
Dengan itu, Anda dapat melihat nilai metode pengembalian langsung pada editor kode, sebagai semacam tampilan HUD:
Untuk informasi lebih lanjut, silakan lihat video ini .
sumber
Menurut Microsoft, tidak ada cara untuk mengimplementasikan ini secara andal dengan kode yang dikelola. Ini adalah masalah yang mereka sadari dan sedang mereka kerjakan:
https://connect.microsoft.com/VisualStudio/feedback/details/597933/add-a-return-pseudo-variable-to-the-visual-studio-debugger-for-net-code
sumber
Mengenai Visual Studio 2015:
Menurut jawaban yang saat ini diterima oleh Marc Gravell:
Jawaban itu juga menyatakan bahwa fungsi ini tidak berfungsi di Visual Studio 2015. Ini tidak (sepenuhnya) benar. Pada Periksa nilai pengembalian panggilan metode ada catatan berikut:
Saya menguji ini di Visual Studio 2015 Enterprise:
sumber
$ReturnValue
berfungsi. Namun, nilai kembali tidak muncul di mana pun jika AndaUse managed compatibility mode
mengaktifkan opsi debugging.Jika Anda masuk ke menu Alat → Opsi , IntelliTrace, dan ubah pengaturan untuk mengumpulkan acara dan memanggil informasi.
Anda dapat kembali ke acara panggilan sebelumnya ( Ctrl+ Shift+ F11) dan melihat nilai sementara yang dikembalikan dari panggilan metode di jendela autos sebagai anak dari nama metode.
Ini tidak menunjukkan kepada Anda nilai pengembalian untuk metode yang Anda gunakan. Itu hanya menunjukkan nilai pengembalian metode terakhir yang disebut dalam metode saat ini.
Jadi, tidak masalah untuk itu
karena ini menunjukkan nilai pengembalian untuk
someTableAdapter.getSomeData()
.Tetapi tidak untuk:
sumber
Trik lama dari hari-hari pra .NET: Buka jendela Register dan lihat nilai register EAX. Ini berisi nilai pengembalian fungsi terakhir yang disebut.
sumber
Langkah keluar dari metode go () menggunakan Shift-F11, dan kemudian di jendela debug "Autos" itu akan menunjukkan nilai kembali dari panggilan metode yang baru saja muncul dari stack (dalam hal ini, metode go () yang merupakan apa maumu). Ini adalah perilaku dalam Visual Studio 2005; Saya belum pernah menggunakan Visual Studio 2008 jadi saya tidak tahu apakah ini berperilaku yang sama dalam versi itu.
sumber
Ya, ada cara yang sangat bagus. Satu kekurangan signifikan adalah Anda harus menunggu selama 5, mungkin 6 tahun. Karena saya melihat bahwa Anda memposting pada November 2008, saya sarankan Anda waaaaaa ...
... aaaait. Dan voila! Hanya untuk Anda, MS telah merilis Visual Studio 2013 terbaru yang merupakan fitur default yang dapat diakses dari menu saat berjalan dalam mode debug (menu Debug → Windows → Autos ).
sumber
Ada banyak solusi, tetapi tidak ada yang memuaskan.
Mengutip John Skeet di bawah ini (mengomentari jawaban yang sekarang dihapus):
Secara teori, debugger bisa memiliki
return
-variable. Setelah semua: itu hanya variabel di stack:Jadi pertimbangkan ini permintaan fitur untuk Visual Studio.
sumber
Saya ingin memperluas jawaban PascalK untuk mendapatkan ini berfungsi di Visual Studio 2015, karena ada fitur tersembunyi yang tidak didokumentasikan dalam Memeriksa nilai pengembalian panggilan metode .
Jika Anda memiliki panggilan fungsi bersarang, variabel pseudo
$ResultValueX
secara otomatis dibuat, di mana X mengacu pada urutan panggilan fungsi. Jadi jika Anda memiliki panggilan sepertiMultiply(Five(), Six())
, pseudo-variable berikut dibuat:sumber
Microsoft Visual C ++ digunakan untuk melakukan ini, tetapi Visual Studio tidak AFAIK .. :(
sumber
Satu-satunya cara yang saya tahu adalah menempatkan breakpoint pada baris kembali dan kemudian memanggil jendela Quick Watch dan memasukkan ekspresi yang dikembalikan:
Tapi ini hanya berfungsi jika panggilan tidak mengubah status objek apa pun (karena akan ada panggilan kedua ke metode yang sama ketika Anda akan melanjutkan eksekusi).
sumber
Anda juga dapat meminta untuk mengevaluasi nilai di jendela perantara juga, jika tidak menetapkan flag atau variabel lain, tetapi hanya mengembalikan sesuatu.
sumber
Saya pikir Anda dapat menentukan ini dengan melihat register RAX di jendela Register (Debug / Windows / Registers). Setelah melangkah keluar (SHIFT + F11) dari fungsi, periksa register RAX. Saya tidak tahu pasti, tetapi sekali di bulan Anda dapat memeriksa register (pra. NET hari) dan melihat nilai kembali di sana. Bahkan mungkin kombinasi RAX dan RBX, dll.
sumber
Membuka Debug → Autos membuat Anda dekat. Itu tidak akan menunjukkan nilai pengembalian yang sebenarnya, tetapi itu akan menunjukkan apa yang dievaluasi dalam pernyataan pengembalian.
sumber
return x + y;
Yang saya maksudkan adalah jika Anda menetapkan breakpoint pada baris ini, maka jendela Debug-Autos Anda akan menampilkan nilai saat ini untuk x dan y. Seperti yang saya katakan, itu hanya membuat Anda dekat. Hanya mencoba untuk menjadi berguna. Saya tidak berpikir itu layak untuk downvote.Ya, dengan beralih ke VB.NET. ; P (Anda baru saja mengatakan "Visual Studio".;)
Selama saya dapat mengingat (dari Visual Basic melalui semua versi VB.NET), Anda dapat dengan mudah menanyakan nama fungsi. Ini "berfungsi" seperti variabel lokal yang secara implisit dinyatakan pada awal fungsi dan nilai saat ini juga digunakan sebagai nilai kembali setiap kali fungsi keluar melalui pernyataan non-kembali berarti (yaitu
Exit Function
atau hanya jatuh melalui) dan tentu saja, ketika pernyataan pengembalian digunakan.Ini juga diatur ke ekspresi pernyataan kembali. Sama seperti variabel lokal, nilainya dapat diperiksa pada setiap titik eksekusi di dalam fungsi (termasuk setelah pernyataan pengembalian dieksekusi). C # tidak memiliki ini dan seharusnya.
Fitur VB.NET kecil itu (ditambah
Exit Function
pernyataan yang memungkinkannya - fitur C # lainnya tidak dimiliki dan seharusnya) sangat berguna dalam bentuk pemrograman defensif yang saya praktikkan di mana saya selalu menginisialisasi nama fungsi ke nilai kegagalan / standar sebagai pernyataan pertama. Kemudian, pada setiap titik kegagalan (yang biasanya terjadi jauh lebih sering daripada titik keberhasilan), saya cukup memanggilExit Function
pernyataan (yaitu tanpa harus menduplikasi kegagalan / ekspresi default atau bahkan nama konstanta / variabel).sumber
Jawaban yang diterima tidak bekerja dengan baik dengan Visual Studio 2015, tetapi dengan menempatkan break point pada baris terakhir dari metode dan menekan F10, itu akan menempatkan semua ekspresi dari nilai pengembalian ke jendela lokal.
sumber
Anda dapat mencoba memilih
"someTableAdapter.getSomeData();"
, klik kanan padanya, dan pilih Quick Watch .sumber
Seret dan lepas ekspresi kembali ke jendela arloji.
Misalnya dalam pernyataannya
seret dan lepas
ke jendela arloji, dan Anda akan melihat nilainya.
Anda dapat melakukan ini untuk ekspresi apa pun.
sumber