Sau nhiều năm sử dụng macro MFC ASSERT xấu xí lớn, cuối cùng tôi đã quyết định bỏ nó và tạo macro ASSERT cuối cùng.Làm thế nào để tìm tên của hàm hiện tại trong thời gian chạy?
Tôi ổn khi nhận được tệp và số dòng, và thậm chí cả biểu thức không thành công. Tôi có thể hiển thị một hộp thông báo với các nút này và các nút Hủy bỏ/Thử lại/Hủy.
Và khi tôi nhấn Thử lại trình gỡ lỗi VS sẽ nhảy vào dòng chứa lệnh gọi ASSERT (trái ngược với việc tháo gỡ ở đâu đó giống như một số hàm ASSERT khác). Vì vậy, đó là tất cả khá nhiều làm việc.
Nhưng điều thực sự thú vị sẽ là hiển thị tên của hàm không thành công.
Sau đó, tôi có thể quyết định xem có nên gỡ lỗi nó mà không cố gắng đoán chức năng của nó trong tên tệp hay không.
ví dụ: nếu tôi có chức năng sau:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
ASSERT(lpCreateStruct->cx > 0);
...
}
Sau đó, khi các đám cháy khẳng định, các bảng thông báo sẽ hiển thị một cái gì đó như:
Function = CMainFrame::OnCreate
Vì vậy, cách đơn giản nhất của việc tìm ra tên hàm hiện nay là gì, tại thời gian chạy?
Không nên sử dụng MFC hoặc khung .NET, mặc dù tôi sử dụng cả hai.
Nó phải càng di động càng tốt.
Nếu bạn có quyền truy cập vào [Ứng dụng gỡ lỗi cho Microsoft® .NET và Microsoft Windows® của John Robbins] (http://www.amazon.com/Debugging-Applications-Microsoft®-Microsoft-Pro-Developer/dp/0735615365/ref = sr_1_16/175-5814253-7853112? Ie = UTF8 & s = điện tử & qid = 1237928779 & sr = 8-16) bạn chắc chắn nên xem xét các xác nhận từ thư viện BugSlayerUtil trên CD được cung cấp. Chúng đặc trưng cho Windows, nhưng thực sự là tối thượng. – Paul
Tôi đã xem http://www.koders.com/cpp/fid3653A5E08C30DB8B7551729FBED0BC3D51B19AD8.aspx nhưng dường như không hiển thị tên hàm. Do đó tôi nghĩ rằng phiên bản của tôi là cuối cùng hơn của mình: D – demoncodemonkey
Nó cho thấy stacktrace. Stacktrace chứa tên hàm, phải không? – Paul