2014-12-21 18 views
19

Trong Linux, khi một quá trình bị treo, một kết xuất lõi sẽ được tạo ra.Làm thế nào để tạo một bãi chứa lõi ngay cả khi quá trình này thường chạy?

Tuy nhiên, tôi muốn tạo vùng kết xuất lõi khi quá trình không bị lỗi, nhưng trông có lỗi. Một chuyên gia từ xa cần phân đoạn lõi để phân tích.

Trong Windows, chúng ta có thể tạo tệp kết xuất của một quy trình thông qua trình quản lý tác vụ và sau đó, quá trình vẫn đang chạy.

Có thể trong Linux không?

Trả lời

20

Gọi gdb, sau đó

attach pid 
gcore 

nơi pid là quá trình id của quy trình liên quan.

9

Nếu bạn muốn thực hiện điều này theo chương trình, hãy thử sử dụng google-coredumper. Ví dụ họ:

#include <google/coredumper.h> 
... 
WriteCoreDump('core.myprogram'); 
/* Keep going, we generated a core file, 
* but we didn't crash. 
*/ 
14

Bạn có thể làm điều đó trong mã của bạn với:

if (fork() == 0) abort(); 
+5

Đây có thể không phải là giải pháp tốt nhất nhưng cậu bé thông minh :) –

17

Bạn có thể sử dụng gcore tiện ích ngay từ dòng lệnh:

gcore [-o filename] pid 

Bằng cách này, nếu bạn muốn để chỉ xem dấu vết ngăn xếp của quá trình, tiện ích gstack sẽ thực hiện công việc.

Cả hai tiện ích đều đi kèm với gdb.

Các vấn đề liên quan