Vì bạn nói rằng bạn có thể chỉnh sửa kịch bản riêng của mình, chỉ cần đặt một:
ps -ef >/tmp/bash_stack_trace.$$
trong nó, nơi mà vấn đề đang xảy ra.
Thao tác này sẽ tạo một số tệp trong thư mục tmp
hiển thị toàn bộ danh sách quy trình tại thời điểm xảy ra.
Sau đó, bạn có thể tìm ra quy trình nào được gọi là quy trình nào khác bằng cách kiểm tra đầu ra này. Đây một trong hai có thể được thực hiện bằng tay, hoặc tự động với một cái gì đó giống như awk
, kể từ khi đầu ra là thường xuyên -. Bạn chỉ cần sử dụng những PID
và PPID
cột để làm việc ra các mối quan hệ giữa tất cả các quá trình bạn đang quan tâm đến
Bạn sẽ cần phải theo dõi các tệp, vì bạn sẽ nhận được một tệp cho mỗi quá trình để chúng có thể được quản lý. Vì đây là cái gì đó chỉ nên được thực hiện trong quá trình gỡ lỗi, phần lớn thời gian mà dòng đó sẽ được nhận xét (trước bởi #
), vì vậy các tệp sẽ không được tạo.
Để làm sạch chúng lên, bạn chỉ có thể làm:
rm /tmp/bash_stack_trace.*
Đó không phải là một vết đống mặc dù. lúc tốt nhất nó sẽ là một dấu vết exec. Nhưng cho rằng
pstree -pal
hoặcps -ef --forest
sẽ phù hợp hơn.Nó không hiển thị cuộc gọi chức năng * ngăn xếp *, cũng như không hiển thị tệp và dòng mã hiện tại. Đó thường là toàn bộ điểm của một dấu vết ngăn xếp. – Evi1M4chine
Có nhưng OP cho biết họ chỉ muốn biết tập lệnh nào sẽ gọi tập lệnh nào, vì vậy chi tiết về dòng nào trong các tập lệnh là không cần thiết. Một khi bạn biết exec-stack, bạn có thể bắt đầu thêm các câu lệnh debug như 'set -x' vào các script riêng lẻ để có một dấu vết chi tiết hơn. – paxdiablo
Tôi không coi đây là câu trả lời cho câu hỏi, ít nhất là không theo ý nghĩa của dấu vết ngăn xếp. – akostadinov