làm sao để biết tên sub , hay function đang được thực thi! (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

hungpecc1

Thành viên gắn bó
Tham gia
24/8/12
Bài viết
1,709
Được thích
2,304
Giới tính
Nam
mình xin gửi lời chào tất cả các thành viên trong diễn đàn!
Mình có 1 tình huống như sau :
Mình có 1 sub Main() , và 1 sub XXX()
Mã:
sub XXX()
........
[B][COLOR=#0000cd]Call sub Main()[/COLOR][/B]
end sub
Mã:
[B][COLOR=#ff8c00]sub Main()[/COLOR][/B]

....... code
[I][COLOR=#008000][B]' vậy cần 1 đoạn code nào ở đây để biết được là sub XXX đã gọi đến sub Main() này
msgbox ' sub có tên là  XXX vừa gọi đến .............................
[/B][/COLOR][/I]
[B][COLOR=#ff8c00]End sub[/COLOR][/B]

Trân trọng !
 
để biết sub nào gọi, bạn báo cho nó biết bằng cách trong cái sub main của bạn có thêm biến chẳng hạn main(optional caller), và trong sub xxx bạn viêt call main("xxx").
tui thường học theo cách hàm c for win dùng con trỏ không kiểu, tiếc là vb không có nên đành phải dùng một biến variant với khai báo optional. sao phải làm vậy? thường thì biến này chỉ đóng vai trò như cái caller nói trên. mỗi khi chạy chương trình bị lỗi, chỉ cần kiểm tra, biết ngay lỗi do đứa nào gây ra. (chắc bạn cũng muốn vậy). ngoài ra nó còn đóng vai trò mở rộng hàm sau này (tăng số biến chẳng hạn) tránh việc phải sửa lại các lệnh đã viết (với chương trình lớn thì việc thay đổi như vậy thực sự là cực hình)...
 
Upvote 0
Sub nào gọi sub nào là công việc của stack trace. VBE cho biết trong cửa sổ immediate (View -> Call Stack)
Hầu hết các ngôn ngữ lập trình đều không có phương tiện trưc tiếp để nhìn cái call stack này. Lý do là nó rất nguy hiểm.

Bạn có thể tự viết các lệnh mô phỏng công việc này. Nhưng vì cái này rất rườm rà nên bạn cần suy nghĩ cho chính chắn là mình muốn gì trước khi bắt đầu, nếu không sẽ phải viết đi viết lại mãi.

Chú thích:
1. theo chỗ tôi biết thì Optional có nghĩa là muốn cũng được không làm cũng chả sao. Đã dò ngược mà lúc có lúc không thì còn trace cái quái gi nữa.
2. C không có tham số optional. Chỉ có cách dùng vararg rắc rối bỏ bố. Thường thường dân viết C dùng wrapper để thực hiện các việc thay đổi tham số. Dân viết C cũng có những macro và struct để xem call stack.
3. đối với project lớn, call stack dùng để test project ở giai đoạn 2, tức là giai đoạn Regression Test, sau khi đã chuẩn duyệt Unit Test. Theo tôi nhận xét thì ở diễn đàn này, chỉ có không tới 5 người biết đến 2 giai đoạn test của một module. Đừng nghĩ đến cái này mất công.
 
Lần chỉnh sửa cuối:
Upvote 0
Sub nào gọi sub nào là công việc của stack trace. VBE cho biết trong cửa sổ immediate (View -> Call Stack)
Hầu hết các ngôn ngữ lập trình đều không có phương tiện trưc tiếp để nhìn cái call stack này. Lý do là nó rất nguy hiểm.

Bạn có thể tự viết các lệnh mô phỏng công việc này. Nhưng vì cái này rất rườm rà nên bạn cần suy nghĩ cho chính chắn là mình muốn gì trước khi bắt đầu, nếu không sẽ phải viết đi viết lại mãi.

Chú thích:
1. theo chỗ tôi biết thì Optional có nghĩa là muốn cũng được không làm cũng chả sao. Đã dò ngược mà lúc có lúc không thì còn trace cái quái gi nữa.
2. C không có tham số optional. Chỉ có cách dùng vararg rắc rối bỏ bố. Thường thường dân viết C dùng wrapper để thực hiện các việc thay đổi tham số. Dân viết C cũng có những macro và struct để xem call stack.
3. đối với project lớn, call stack dùng để test project ở giai đoạn 2, tức là giai đoạn Regression Test, sau khi đã chuẩn duyệt Unit Test. Theo tôi nhận xét thì ở diễn đàn này, chỉ có không tới 5 người biết đến 2 giai đoạn test của một module. Đừng nghĩ đến cái này mất công.

@VetMini: tui không nói là c có optional mà là thích con trỏ không kiểu của nó, tiếc là vb không có (hay là tui không biết, tui học c ở trường, còn vb là tự học) nên phải dùng variant vậy. còn tại sao lại dùng optional? tất nhiên là không nhất thiết rồi. tui thường dùng như vậy (một cách tương thích ngược) để những lệnh đã viết trước đây (khi chưa sửa hàm) gọi đến không bị lỗi.
 
Upvote 0
Trường hợp project lớn thì nên học qua cách dùng Conditional Compiling Commands (các lệnh đặt trong block #IF)

Dùng optional arguments với mục đích compatible với code cũ là cách làm cực chẳng đã. Không phải la cách thức đúng đắn của một project. Chỉ dùng khi cần phải chỉnh sửa cho một trường hợp đặc thù nào đó. Ví dụ như bạn có 1 project giao cho nhiều khách hàng, trong đó có một khách hàng có tình trạng đặc biệt cần phải thêm thắt cách sử lý trong 1 vài subs functions nào đó. Khi ấy ta chỉnh 1 vài sub/func và vẫn giữ nguyên tình trạng project chung.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom