Câu chuyện của Hacker
Ngày là 12/02/10. Những ngày trước Giáng sinh đang trôi đi và tôi đã gặp phải một kẻ cản đường lớn với tư cách là một lập trình viên Windows. Tôi đã sử dụng AQTime, tôi đã thử buồn ngủ, sáng bóng và rất buồn ngủ, và như chúng tôi nói, VTune đang cài đặt. Tôi đã thử sử dụng trình biên dịch VS2008 và nó đang bị trừng phạt tích cực cũng như thường không thể chịu được. Tôi đã sử dụng kỹ thuật tạm dừng ngẫu nhiên. Tôi đã kiểm tra cây gọi. Tôi đã loại bỏ dấu vết chức năng. Nhưng sự thật đau lòng của vấn đề là ứng dụng tôi đang làm việc có hơn một triệu dòng mã, với các ứng dụng của bên thứ ba có thể trị giá hàng triệu dòng khác.
Tôi cần các công cụ tốt hơn. Tôi đã đọc các chủ đề khác. Tôi đã thử từng hồ sơ được liệt kê trong mỗi chủ đề. Đơn giản là phải có một cái gì đó tốt hơn những lựa chọn đắt đỏ và đắt tiền này, hoặc số lượng công việc lố bịch mà hầu như không thu được. Để làm phức tạp thêm vấn đề, mã của chúng tôi bị xâu chuỗi nhiều và chạy một số vòng lặp Qt Event, một số trong đó rất mong manh đến nỗi chúng bị hỏng dưới thiết bị nặng do sự chậm trễ thời gian. Đừng hỏi tôi tại sao chúng ta đang chạy nhiều vòng sự kiện. Không ai có thể nói với tôi.
Có lựa chọn nào khác dọc theo dòng Valgrind trong môi trường windows không?
Có điều gì tốt hơn so với hàng loạt công cụ bị hỏng mà tôi đã thử không?
Có bất cứ điều gì được thiết kế để tích hợp với Qt, có lẽ với màn hình hiển thị các sự kiện hữu ích trong hàng đợi không?
Một danh sách đầy đủ các công cụ tôi đã thử, với những công cụ thực sự hữu ích in nghiêng:
- AQTime: Khá tốt! Có một số rắc rối với đệ quy sâu, nhưng biểu đồ cuộc gọi là chính xác trong những trường hợp này và có thể được sử dụng để xóa bất kỳ sự nhầm lẫn nào bạn có thể có. Không phải là một công cụ hoàn hảo, nhưng đáng để thử. Nó có thể phù hợp với nhu cầu của bạn, và nó chắc chắn là đủ tốt cho tôi hầu hết thời gian.
- Tấn công tạm dừng ngẫu nhiên trong chế độ gỡ lỗi: Không đủ thông tin đủ thời gian.
Một công cụ tốt nhưng không phải là một giải pháp hoàn chỉnh. - Parallel Studios: Tùy chọn hạt nhân. Đáng ghét, kỳ lạ, và mạnh mẽ điên cuồng. Tôi nghĩ bạn nên đánh giá 30 ngày và tìm hiểu xem nó có phù hợp không. Nó cũng thật tuyệt.
- AMD Codeanalyst: Tuyệt vời, dễ sử dụng, rất dễ bị sập, nhưng tôi nghĩ đó là một điều môi trường. Tôi khuyên bạn nên thử nó, vì nó là miễn phí.
- Luke Stackwalker: Hoạt động tốt trên các dự án nhỏ, có một chút cố gắng để nó hoạt động trên các dự án của chúng tôi. Một số kết quả tốt mặc dù, và nó chắc chắn thay thế Buồn ngủ cho các nhiệm vụ cá nhân của tôi.
- PurifyPlus: Không hỗ trợ cho môi trường Win-x64, nổi bật nhất là Windows 7. Nếu không thì tuyệt vời. Một số đồng nghiệp của tôi ở các phòng ban khác thề.
- VS2008 Profiler: Tạo đầu ra trong phạm vi hợp đồng 100+ trong chế độ theo dõi chức năng ở độ phân giải yêu cầu. Về mặt tích cực, tạo ra kết quả vững chắc.
- GProf: Yêu cầu GCC phải có hiệu quả vừa phải.
- VTune: Biên giới hỗ trợ W7 của VTune về tội phạm. Nếu không thì xuất sắc.
- PIN: Tôi cần phải hack công cụ của riêng tôi, vì vậy đây là loại cuối cùng.
- Buồn ngủ \ VerySaddy: Hữu ích cho các ứng dụng nhỏ hơn, nhưng không thành công ở đây.
- EasyProfiler: Không tệ nếu bạn không bận tâm một chút về mã được chèn thủ công để chỉ ra vị trí của thiết bị.
- Valgrind: * chỉ nix, nhưng rất tốt khi bạn ở trong môi trường đó.
- OProfile: Chỉ Linux.
- Proffy: Họ bắn ngựa hoang.
Các công cụ được đề xuất mà tôi chưa thử:
- XPerf:
- Glowcode:
- Người chia sẻ:
Ghi chú: Môi trường Intel tại thời điểm này. VS2008, tăng thư viện. Qt 4+. Và tất cả các humdinger khốn khổ của tất cả: tích hợp Qt / MFC thông qua trolltech.
Bây giờ: Gần hai tuần sau, có vẻ như vấn đề của tôi đã được giải quyết. Nhờ có nhiều công cụ, bao gồm hầu hết mọi thứ trong danh sách và một vài mánh khóe cá nhân của tôi, chúng tôi đã tìm ra những điểm nghẽn chính. Tuy nhiên, tôi sẽ tiếp tục thử nghiệm, khám phá và thử các trình biên dịch mới cũng như công nghệ mới. Tại sao? Bởi vì tôi nợ các bạn, vì các bạn đá. Nó làm chậm dòng thời gian xuống một chút, nhưng tôi vẫn rất hào hứng khi tiếp tục thử các công cụ mới.
Tóm tắt
Trong số nhiều vấn đề khác, một số thành phần gần đây đã được chuyển sang mô hình luồng không chính xác, gây ra tình trạng treo máy nghiêm trọng do thực tế là mã bên dưới chúng tôi đột nhiên không còn đa luồng. Tôi không thể nói nhiều hơn vì nó vi phạm NDA của tôi, nhưng tôi có thể nói với bạn rằng điều này sẽ không bao giờ được tìm thấy bằng cách kiểm tra thông thường hoặc thậm chí bằng cách xem xét mã thông thường. Không có hồ sơ, thư pháp và tạm dừng ngẫu nhiên kết hợp, chúng tôi vẫn sẽ hét lên giận dữ của chúng tôi tại vòng cung màu xanh tuyệt đẹp của bầu trời. Rất may, tôi làm việc với một số tin tặc giỏi nhất mà tôi từng gặp và tôi có quyền truy cập vào một câu thơ tuyệt vời với đầy đủ các công cụ tuyệt vời và những người tuyệt vời.
Gentlefolk, tôi đánh giá cao điều này và chỉ tiếc rằng tôi không có đủ đại diện để thưởng cho mỗi bạn một tiền thưởng. Tôi vẫn nghĩ rằng đây là một câu hỏi quan trọng để có câu trả lời tốt hơn những câu hỏi mà chúng ta đã có từ trước đến nay về SO.
Kết quả là, mỗi tuần trong ba tuần tiếp theo, tôi sẽ đưa ra số tiền thưởng lớn nhất mà tôi có thể chi trả, và trao giải thưởng cho câu trả lời bằng công cụ đẹp nhất mà tôi nghĩ không phải là kiến thức phổ biến. Sau ba tuần, chúng tôi hy vọng sẽ tích lũy được một hồ sơ dứt khoát của các trình hồ sơ, nếu bạn tha thứ cho sự khôn ngoan của tôi.
Take-Away
Sử dụng một hồ sơ. Chúng đủ tốt cho Ritchie, Kernighan, Bentley và Knuth. Tôi không quan tâm bạn nghĩ bạn là ai. Sử dụng một hồ sơ. Nếu cái bạn có không hoạt động, hãy tìm cái khác. Nếu bạn không thể tìm thấy một, mã một. Nếu bạn không thể mã hóa một, hoặc đó là một sự cố nhỏ hoặc bạn đang bị mắc kẹt, hãy sử dụng tạm dừng ngẫu nhiên. Nếu vẫn thất bại, hãy thuê một số học sinh tốt nghiệp để tạo ra một hồ sơ.
Một cái nhìn dài hơn
Vì vậy, tôi nghĩ rằng nó có thể tốt để viết lên một chút hồi tưởng. Tôi đã chọn làm việc rộng rãi với Parallel Studios, một phần vì nó thực sự được xây dựng dựa trên Công cụ PIN. Đã có những thỏa thuận học thuật với một số nhà nghiên cứu có liên quan, tôi cảm thấy rằng đây có lẽ là một dấu ấn của một số chất lượng. Rất may, tôi đã đúng. Mặc dù GUI hơi khủng khiếp, tôi thấy IPS cực kỳ hữu ích, mặc dù tôi không thể thoải mái giới thiệu nó cho mọi người. Quan trọng, không có cách rõ ràng nào để có được số lần truy cập cấp độ dòng, điều mà AQT và một số trình biên dịch khác cung cấp, và tôi thấy rất hữu ích để kiểm tra tỷ lệ lựa chọn chi nhánh trong số những thứ khác. Trong mạng, tôi cũng rất thích sử dụng AQTime và tôi thấy hỗ trợ của họ thực sự phản hồi. Một lần nữa, tôi phải đủ điều kiện giới thiệu: Rất nhiều tính năng của chúng không hoạt động tốt và một số trong số chúng hoàn toàn dễ bị lỗi trên Win7x64. XPerf cũng thực hiện một cách đáng ngưỡng mộ, nhưng lại chậm chạp về chi tiết lấy mẫu cần thiết để có được đọc tốt trên một số loại ứng dụng.
Ngay bây giờ, tôi phải nói rằng tôi không nghĩ có một tùy chọn dứt khoát để cấu hình mã C ++ trong môi trường W7x64, nhưng chắc chắn có những tùy chọn đơn giản là không thực hiện bất kỳ dịch vụ hữu ích nào.