Nếu bạn có một bộ mã Delphi sạch và tất cả các chuỗi được tạo bằng TThread, bạn có thể đặt điểm ngắt trong phương thức khởi tạo (TThread.Create) và tìm ra ai đã tạo chủ đề của bạn. Bạn thậm chí có thể cố gắng đặt tên cho tất cả các chủ đề của mình bằng cách sử dụng tính năng được tích hợp trong đối tượng Delphi TThread cho phép bạn đặt tên gỡ lỗi cho mỗi chuỗi. Tuy nhiên, làm thế nào để bạn xác định các chuỗi phụ liên tục, khó tìm, vẫn còn ẩn danh (không có tên gỡ lỗi) và xuất hiện, ví dụ, trong thời gian khởi tạo mô-đun, khi ứng dụng bắt đầu. Quay lại đầu trang Tôi có thể thực hiện một bước thông qua việc khởi tạo mô-đun, nhưng tôi không thể xác định tất cả các mô-đun nguồn (giả sử, 900+ phần khởi tạo mô-đun được thực hiện) có khả năng tạo chủ đề và tôi đã không tìm ra cách thêm một thông báo gỡ lỗi (sử dụng các thuộc tính breakpoint và các thông báo) sẽ đổ từng tên đơn vị trong khi nó khởi tạo. Việc sử dụng sáng tạo các điểm ngắt được thiết lập trong System.pas, với các thông điệp ghi nhật ký cho phép tôi thực hiện một số việc khi gỡ lỗi các ứng dụng đơn giản, nhưng ứng dụng càng phức tạp, tôi càng cảm thấy bị mù bởi các chủ đề, cả hai đều được tạo ra ở giữa của một ứng dụng chạy, và những ứng dụng được tạo tại thời điểm mô đun-init (đó là trước khi bạn bước vào dòng đầu tiên của mã trong dự án dpr của bạn).Làm thế nào bạn có thể tìm ra ai tạo ra tất cả các chủ đề của bạn trong một chương trình delphi?
Tôi muốn biết bạn có thể tìm thấy những kỹ thuật nâng cao nào để xác định và tìm ra ai đã tạo một chuỗi cụ thể. Nếu chúng ta đang sử dụng một trình gỡ lỗi như GDB thay vì một trình gỡ rối như hạt nhân trình gỡ lỗi delphi (Turbo Debugger?) Được tích hợp vào IDE delphi, tôi nghĩ chúng ta có thể thiết lập một điểm ngắt trên một hàm api của cửa sổ như BeginThread. Nhưng tôi không nghĩ rằng tôi có thể làm điều đó ở Delphi.
Cập nhật: Tôi không biết bạn có thể đặt điểm ngắt trong phần triển khai của windows.pas cho các dll cửa sổ bên ngoài như kernel32.dll.
Cập nhật 2: Có vẻ như câu trả lời của David H là ý tưởng tốt nhất để sử dụng chung. Tôi cũng đang tìm kiếm một thư viện mã trợ giúp nhỏ mà tôi đang viết ngay bây giờ để duy trì một từ điển các id luồng đã được nhìn thấy trước đó, và gán một số tên gỡ lỗi cho các chủ đề không được đặt tên khác, dựa trên thời gian tạo của chúng. chúng tôi đã gọi ngay trước khi chúng tôi nhận thấy chuỗi mới tồn tại). Tôi nghĩ rằng điều này sẽ giúp tôi thu hẹp 40 chủ đề được đánh số để tất cả chúng được đặt tên, mặc dù một số chúng được tạo trong các tệp C/C++ bên ngoài hoặc bằng các quy trình COM.
Để biết thông tin, kernel32 không phải là một phần của hạt nhân. Tôi biết điều này là khó hiểu. Hạt nhân Windows nằm trong ntoskrnl.exe. kernel32 là một DLL chế độ người dùng, mặc dù tôi chắc chắn nó chuyển công việc sang chế độ hạt nhân cho nhiều chức năng của nó. Bạn chắc chắn không thể gỡ lỗi mã chế độ hạt nhân với trình gỡ lỗi Delphi –
Tôi thực sự biết rằng một nơi nào đó ở phía sau đầu của tôi. Nhưng để được ít cẩu thả tôi đã sửa chữa Cập nhật của tôi. –
Tôi nhận thấy một chuỗi được tạo bởi một số cuộc gọi COM CoInitializeSecurity. Tôi hơi ngạc nhiên bởi điều đó. –