2009-04-17 33 views
14

Như đã lỗi thời và đau đớn như vậy - tôi làm việc tại một công ty tiếp tục chủ động sử dụng VB6 cho một dự án lớn. Thực tế, 18 tháng trước, chúng tôi đã chống lại giới hạn số nhận dạng 32k.Truy cập chính xác các giới hạn VB6

Không sẵn sàng từ bỏ cơ sở mã lớn và viết lại mọi thứ trong .NET. Chúng tôi đã phá vỡ ứng dụng của mình thành một tệp thực thi chính và một số tệp DLL hỗ trợ. Tuần này chúng tôi lại tiếp tục giới hạn 32k.

Vấn đề chúng tôi gặp phải là không có công cụ nào chúng tôi có thể tìm thấy sẽ cho chúng tôi biết số lượng mã định danh duy nhất mà nguồn của chúng tôi đang sử dụng. Chúng tôi không có cách nào chính xác để đánh giá nỗ lực của chúng tôi đang giảm số lượng số nhận dạng hoặc mức độ gần đến giới hạn trước khi chúng tôi tiếp cận.

Có ai biết công cụ sẽ quét nguồn cho dự án và trả lại một số chỉ số và thống kê chính xác không?

Trả lời

2

OK. Trình xem dự án Metrics là một phần của công cụ Project Analyzer từ Aivosto sẽ thực hiện chính xác những gì bạn muốn. Tôi đã bao gồm một ảnh chụp màn hình và cũng có thể liên kết tới danh sách số liệu bao gồm số lượng các biến vv

Metrics List

alt text http://www.aivosto.com/project/help/pm-main.gif

+0

Tôi muốn công cụ này hoạt động ... Nó hiển thị số lượng khai báo biến (cũng như CodeSMART) nhưng nó vẫn không hiển thị số lượng mã định danh duy nhất. Nếu bạn có ba subs mà tất cả chứa cùng một biến "myvar", sau đó nó được tính là ba khai báo biến nhưng chỉ một định danh duy nhất. Trình phân tích dự án chỉ hiển thị số lượng các khai báo ... –

1
+1

Có, nhưng người yêu cầu cần đếm số lượng khai báo biến, và tôi không thể thấy CodeSmart hiển thị con số đó ở đâu. Bạn có thể cho chúng tôi biết nó nên ở đâu không? Cảm ơn. –

+0

Nó ở đó, nhưng tôi không có lưu trữ hình ảnh để sửa ảnh chụp màn hình từ trang web của nhà sản xuất. Nếu bạn tải về bản dùng thử và cài đặt nó, bạn có thể chạy nó và xem cho chính mình. – MaSuGaNa

+0

Tôi đã cài đặt CodeSMART nhưng không thể tìm thấy nó. Bạn có thể nói "đường dẫn" của cây nơi giá trị này được hiển thị không? –

-1

Có vẻ như là Compuware's DevPartner có loại phân tích mã đó. Tôi không biết nếu phiên bản hiện tại vẫn hỗ trợ Visual Basic 6.0. (Nhưng ít nhất có bản dùng thử 14 ngày có sẵn)

0

Bạn có thể có được điều này từ một công cụ khai thác định danh từ mã VB6. Sau đó, tất cả những gì bạn phải làm là sắp xếp danh sách, loại bỏ các bản sao và đo kích thước danh sách. Chúng tôi có một số source code search engine chia mã nguồn thành mã thông báo ngôn ngữ ("lexes"), với một số mã thông báo đó chính xác là các mã định danh đó. Điều đó sẽ chứa chính xác dữ liệu bạn muốn. Tuy nhiên, có thể có một cách khác để giải quyết vấn đề của bạn: tìm ra tên biến hiếm khi xảy ra và thay thế chúng bằng một tập hợp các tên chuẩn (ví dụ: "temp"). Vì vậy, điều bạn thực sự muốn là số lượng của từng tên biến để bạn có thể sắp xếp cho "số lượng nhỏ tham chiếu". Cùng một dữ liệu lexer có thể cung cấp thông tin này.

Sau đó, tất cả những gì bạn cần là một công cụ để đổi tên số nhận dạng có sự xuất hiện thấp thành thứ gì đó từ tập hợp tiêu chuẩn. Chúng tôi cung cấp obfuscators thay thế một tên khác có thể có thể làm điều này.

[Cập nhật tháng 10 năm 2014]. Chỉ có một cuộc trò chuyện dài với ai đó với vấn đề này. Hóa ra có một câu trả lời khá khái niệm để xây dựng một công cụ và được gọi là register coloring, phân bổ số lượng đăng ký cố định cho một số toán hạng tùy ý. Điều này hoạt động bằng cách tính toán một "đồ thị giao thoa" trên các toán hạng; và hai toán hạng không "can thiệp" có thể được gán cùng một thanh ghi. Người ta có thể sử dụng điều đó để phân bổ 2^16 tên biến có sẵn cho một số định danh tùy ý, nếu biểu đồ nhiễu không đủ tệ. Tôi đoán là nó không phải là. YMMV, và ai đó vẫn phải xây dựng một công cụ như vậy, cần một trình phân tích cú pháp VB6 và máy móc để tính toán một biểu đồ như vậy. [Kiểm tra tiểu sử của tôi].

0

Cheat - tạo một lớp không sử dụng với #### biến duy nhất trong đó. Sử dụng Excel hoặc một cái gì đó để tạo ra các tên biến duy nhất có chữ cái. Xóa lớp khỏi dự án khi bạn đạt đến giới hạn hoặc nhận xét các khối của 100 biến duy nhất ..

Tôi muốn dựa vào trình biên dịch (trong đó xác định số lượng biến quá nhiều) so với một số công cụ của bên thứ ba.

(oh crud, xin lỗi tới Necro - không chú ý đến ngày tháng)

1

Công ty tôi làm việc cho cũng có một dự án VB6 lớn mà gặp phải những hạn định. Tôi đã phát triển một cách để đếm chính xác số lượng số nhận dạng còn lại và điều này đã được đưa vào quy trình xây dựng của chúng tôi cho dự án này.

Sau khi thử một số công cụ không thành công, cuối cùng tôi đã nhận ra rằng bản thân IDE VB6 biết chính xác có bao nhiêu số nhận dạng mà nó còn lại. Trong thực tế, IDE VB6 ném một lỗi "hết bộ nhớ" khi bạn thêm một biến vượt quá giới hạn của nó.

Lợi dụng thực tế này, tôi đã viết dự án Add-In VB6 đầu tiên biên dịch dự án hiện đang được nạp trong IDE, sau đó thêm các biến được đặt tên duy nhất cho dự án cho đến khi nó phát ra lỗi. Khi một lỗi được nâng lên, nó ghi lại số lượng số nhận dạng được thêm vào trước lỗi khi số lượng số nhận dạng còn lại.

Số này được lưu trữ trong tệp ở vị trí được biết đến quy trình xây dựng tự động của chúng tôi, sau đó đọc số này và báo cáo cho nhóm phát triển. Khi nó được dưới một giá trị chúng tôi cảm thấy thoải mái với, chúng tôi lên lịch một số thời gian tái cấu trúc và di chuyển nhiều mã ra khỏi dự án này vào các dự án DLL. Chúng tôi đã sử dụng điều này trong sản xuất trong nhiều năm nay, và đã được chứng minh là một quá trình đáng tin cậy.

Để trả lời trực tiếp câu hỏi, sử dụng Bổ trợ là cách duy nhất tôi biết để đo chính xác số lượng số nhận dạng còn lại. Mặc dù tôi không thể chia sẻ mã Add-In mà dự án của chúng tôi đang sử dụng, tôi có thể nói rằng không có nhiều mã liên quan và không mất nhiều thời gian để phát triển.

Microsoft có hướng dẫn đàng hoàng để biết cách tạo một add-in, có thể giúp bạn bắt đầu: https://support.microsoft.com/en-us/kb/189468

Dưới đây là một số chi tiết quan trọng cụ thể để định danh tính:

  • Các VB6 IDE sẽ không nhất quán ném lỗi khi ra khỏi số nhận dạng cho đến khi dự án được tải hiện tại đã được biên dịch. Add-In của chúng tôi lập trình thực hiện điều này trước khi thêm số nhận dạng để đảm bảo tính chính xác. Nếu dự án không thể được biên dịch, thì không thể thu được số đếm chính xác.
  • Có 32.500 số nhận dạng có sẵn cho dự án VB6 mới, trống.
  • Chỉ có tên số nhận dạng duy nhất được tính. Hai biến cục bộ có cùng tên trong hai thường trình khác nhau chỉ được tính là một định danh.
Các vấn đề liên quan