Hmm. Bạn có thể thiết lập trình xử lý tín hiệu để khởi chạy trình gỡ rối với quy trình hiện tại. Bằng cách đó bạn có thể kiểm tra toàn bộ trạng thái "sống".
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
const char *prog=0;
void fn(int signum)
{
char buf[256];
snprintf(buf,255,"ddd %s %d",prog,getpid());
system(buf);
}
int main(int argc, char **argv)
{
prog=argv[0];
signal(SIGSEGV,&fn);
int *p=0;
int k=*p;
}
CẬP NHẬT: Được tổ chức theo đề xuất của miedwar và Fanatic23. Các bản phân phối Ubuntu hiện tại được định cấu hình để không cho phép gỡ lỗi các quy trình không phải con. Xem https://askubuntu.com/questions/41629/after-upgrade-gdb-wont-attach-to-process để sửa chữa.
Nguồn
2010-07-13 12:02:50
+1 điều cần biết bạn có thể nhận tín hiệu này, btw, bạn cần thoát() sau hệ thống() để nó không được gọi nhiều lần. – miedwar
Nguyên mẫu cho fn cần một đối số nguyên để lấy mã được biên dịch. – Fanatic23