2011-10-12 24 views
7

Tôi đang chạy một ứng dụng được nhúng trên bo mạch ARM9, trong đó tổng kích thước flash chỉ là 180MB. Tôi có thể chạy gdb, nhưng khi tôi làmCách giới hạn kích thước tệp kết xuất lõi khi tạo tệp bằng cách sử dụng GDB

(gdb) generate-core-dump

tôi nhận được một lỗi

warning: Memory read failed for corefile section, 1048576 bytes at 0x4156c000. 
warning: Memory read failed for corefile section, 1048576 bytes at 0x50c00000. 
Saved corefile core.5546 
The program is running. Quit anyway (and detach it)? (y or n) [answered Y; input not from terminal] 
Tamper Detected 
**********OUTSIDE ifelse 0********* 
length validation is failed 

Tôi cũng thiết lập ulimit -c 50000 nhưng vẫn là bãi chứa lõi vượt quá giới hạn này. Khi tôi thực hiện ls -l để kiểm tra kích thước tệp, dung lượng trên 300 MB. Trong trường hợp này làm thế nào tôi nên giới hạn kích thước của dump lõi?

Trả lời

8

GDB không tôn trọng 'ulimit -c', chỉ hạt nhân thực hiện.

Không rõ liệu bạn có chạy GDB trên bảng mục tiêu hay trên máy chủ phát triển (và sử dụng gdbserver trên mục tiêu). Bạn có thể nên sử dụng sau này, mà sẽ cho phép bạn thu thập đầy đủ lõi dump.

Đoạn mã rút gọn là một cơn đau, vì thường thì chúng sẽ không chứa chính xác thông tin bạn cần để gỡ lỗi sự cố.

+0

Tôi đang chạy gdb trên bảng đích. Tôi cũng có thể sử dụng gdbserver, nhưng kể từ vụ tai nạn là không dễ dàng tái sản xuất, tôi sẽ với tùy chọn đầu tiên. –

+1

Xin lỗi nhưng tôi không thể nhìn thấy cách chạy gdb hoặc gdbserver như bất cứ điều gì để làm với vụ tai nạn được dễ dàng sao chép hay không? – shodanex

+0

@shodanex - sử dụng mô hình client-server lõi có thể được thu thập trên hệ thống tệp "lưu trữ", không phải trên hệ thống nhúng, mà ở đây chỉ có 180MB không gian có sẵn cho tệp lõi. Có lẽ hệ thống máy chủ có một ổ cứng đầy đủ và có thể lưu một tệp lõi lớn hơn nhiều. – Peter

0

Khi nào bạn sử dụng ulimit -c? Nó phải được sử dụng trước khi bắt đầu chương trình mà bạn đang tạo ra một bãi chứa lõi, và bên trong cùng một phiên.

+0

Tôi đã đặt ulimit trước khi chạy GDB. Tôi đã đặt 'ulimit -c 50000' trong /etc/rc.d/init.d/startup và tôi đã kiểm tra thủ công bằng cách sử dụng 'ulimit -a' và nó được đặt đúng. –

4

trong shell của bạn rc-file:

limit coredumpsize 50000    # or whatever limit size you like 

rằng nên đặt giới hạn cho tất cả mọi thứ, bao gồm GDB

Lưu ý:

Nếu bạn đặt nó là 0, bạn có thể chắc chắn rằng bạn thư mục chính không lộn xộn với các tệp kết xuất lõi.

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