Làm thế nào tôi có thể làm cho gdb lưu lịch sử lệnh?


195

Làm thế nào tôi có thể thiết lập gdbđể nó lưu lịch sử lệnh? Khi bắt đầu một gdbphiên mới , tôi muốn sử dụng các phím mũi tên lên để truy cập các lệnh của các phiên trước đó.


1
Lưu ý: .gdbinitTệp phải được người khác bảo vệ chống ghi so với bạn trên linux.
urzeit

@urzeit - Tôi nghĩ đó là một nguyên nhân bị mất trên các bản phát hành như Ubuntu. Họ cho phép bất cứ ai vào thư mục nhà của bất kỳ ai khác theo mặc định.
jww

@jww .gdbinitTệp không được xử lý nếu các quyền không được thiết lập chính xác, bất kể đó là mặc định hay những hạn chế nào khác đối với các thư mục chính được sử dụng bởi hệ thống.
urzeit

@urzeit Nếu bạn tạo một .gdbinittệp và đó không phải là trường hợp, điều đó có nghĩa là bạn umaskkhông được đặt thành một giá trị lành mạnh như thế nào 022. Sau đó, trong một hệ thống nhiều người dùng, bạn có vấn đề lớn hơn chỉ là .gdbinittệp của bạn .
Kaz

Câu trả lời:


283

Câu trả lời ngắn: echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit


Câu trả lời dài:

Lịch sử lệnh được trình bày trong hướng dẫn GDB, Lịch sử lệnh 22.3 . Tạo một tệp $HOME/.gdbinit, thay đổi quyền của nó thành 0600và thêm nội dung sau:

set history save on

Bạn có thể đặt số lượng các lệnh trong quá khứ được lưu với sau đây. Lệnh được mô tả là "Đặt số lượng lệnh mà gdb giữ trong danh sách lịch sử của nó. Mặc định này là giá trị của biến môi trường GDBHISTSIZE hoặc 256 nếu biến này không được đặt. Giá trị không phải là số của GDBHISTSIZE bị bỏ qua. Nếu kích thước là không giới hạn hoặc nếu GDBHISTSIZE là số âm hoặc chuỗi trống, thì số lệnh gdb giữ trong danh sách lịch sử là không giới hạn " .

set history size <size>

Một lệnh liên quan là set history remove-duplicates <count>. Lệnh được mô tả là "Kiểm soát loại bỏ các mục lịch sử trùng lặp trong danh sách lịch sử lệnh. Nếu số đếm khác không, gdb sẽ xem lại các mục lịch sử đếm cuối cùng và xóa mục nhập đầu tiên trùng lặp với mục nhập hiện tại được thêm vào danh sách lịch sử lệnh. Nếu số lượng là không giới hạn thì giao diện này không bị ràng buộc. Nếu số lượng là 0, thì việc xóa các mục lịch sử trùng lặp sẽ bị vô hiệu hóa " .

set history remove-duplicates <count>

Theo mặc định, gdb lưu lịch sử vào tệp ./.gdb_history trong thư mục hiện tại . Nếu bạn muốn lịch sử lệnh của bạn không phụ thuộc vào thư mục bạn đang ở, cũng bao gồm:

set history filename ~/.gdb_history

4
Chỉ cần tìm ra điều này cho bản thân tôi và nghĩ rằng tôi sẽ chia sẻ nó trên SO.
Frank

3
Lần sau, việc tạo ra những câu hỏi tự trả lời như phi cộng đồng là hoàn toàn hợp pháp. :)
Greg Hewgill

@Frank Làm thế nào nếu tôi gõ nthì tôi bấm phím lên, tôi nhận được tất cả các lệnh trước đó bắt đầu bằng n.
CUỘC SỐNG

Trên GDB 8.0.1, điều này dường như hoạt động mà không có quyền tập tin đặc biệt.
Ryan1729

7

Nếu bạn vẫn gặp sự cố, hãy đảm bảo biến môi trường HISTSIZE của bạn là một con số cao phù hợp. Của tôi trống, khiến cài đặt "kích thước lịch sử" của gdb mặc định thành 0.

Thêm

export HISTSIZE=100000000

với ~ / .bashrc của tôi và mọi thứ đều phình ra

Bạn có thể kiểm tra cài đặt lịch sử gdb của mình bằng cách thực hiện (bên trong gdb) "hiển thị lịch sử":

gdb$ show history
expansion:  History expansion on command input is off.
filename:  The filename in which to record the command history is "/home/xiao/.gdb_history".
save:  Saving of the history record on exit is on.
size:  The size of the command history is 100000000.

Từ các tài liệu :

đặt kích thước lịch sử kích thước lịch sử đặt kích thước
lịch sử không giới hạn
Đặt số lượng lệnh mà GDB giữ trong danh sách lịch sử của nó. Điều này mặc định là giá trị của biến môi trường HISTSIZE hoặc 256 nếu biến này không được đặt. Nếu kích thước là không giới hạn, số lượng lệnh GDB giữ trong danh sách lịch sử là không giới hạn.


Tôi đã từng gặp vấn đề tương tự. Mặc dù đưa set history size 100vào tệp .gdbinit, biến môi trường HISTSIZE vẫn khiến kích thước lịch sử được đặt thành không. Vấn đề là gdb không hiểu rằng HISTSIZE có thể được đặt thành không giới hạn
DavidW

Lỗi HISTSIZE trong gdb đã được sửa chữa kể từ tháng 6 năm 2015 , không phải là thay đổi này có thể xuất hiện trên hệ thống của bạn. Trong khi đó, nếu HISTSIZEđược đặt thì phải> 0 hoặc gdb sẽ tắt lịch sử.
Nate R.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.