ฉันจะทำให้ gdb บันทึกประวัติคำสั่งได้อย่างไร


195

ฉันจะตั้งค่าgdbเพื่อบันทึกประวัติคำสั่งได้อย่างไร เมื่อเริ่มต้นgdbเซสชันใหม่ฉันต้องการใช้ปุ่มลูกศรขึ้นเพื่อเข้าถึงคำสั่งของเซสชันก่อนหน้า


1
หมายเหตุ: .gdbinitไฟล์จะต้องมีการป้องกันการเขียนโดยผู้อื่นที่ไม่ใช่คุณบน linux
urzeit

@urzeit - ฉันคิดว่านั่นเป็นสาเหตุที่ทำให้สูญเสีย distros เช่น Ubuntu พวกเขาอนุญาตให้ทุกคนเข้าสู่โฮมไดเร็กตอรี่ของคนอื่นโดยปริยาย
jww

@jww .gdbinitไฟล์ไม่ได้รับการประมวลผลหากการตั้งค่าการอนุญาตไม่ถูกต้องไม่ว่าจะเป็นค่าเริ่มต้นหรือข้อ จำกัด อื่น ๆ ของโฮมไดเร็กตอรี่ที่ระบบใช้อยู่.
urzeit

@urzeit ถ้าคุณสร้าง.gdbinitไฟล์และที่ไม่ได้เป็นกรณีที่มันหมายความว่าคุณไม่ได้ถูกกำหนดให้เป็นค่าที่มีสติเช่นumask 022จากนั้นในระบบที่มีผู้ใช้หลายคนคุณมีปัญหามากกว่า.gdbinitไฟล์ของคุณ
Kaz

คำตอบ:


283

คำตอบสั้น ๆ : echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit


คำตอบยาว:

ประวัติคำสั่งได้รับการคุ้มครองในคู่มือ GDB 22.3 ประวัติคำสั่ง สร้างไฟล์$HOME/.gdbinitเปลี่ยนการอนุญาตเป็น0600และเพิ่มเนื้อหาต่อไปนี้:

set history save on

คุณสามารถตั้งค่าจำนวนคำสั่งที่ผ่านมาที่บันทึกไว้ด้วยต่อไปนี้ คำสั่งอธิบายว่า"ตั้งค่าจำนวนคำสั่งที่ gdb เก็บไว้ในรายการประวัติค่าดีฟอลต์นี้คือค่าของตัวแปรสภาวะแวดล้อม GDBHISTSIZE หรือเป็น 256 หากไม่ได้ตั้งค่าตัวแปรนี้ค่าที่ไม่ใช่ตัวเลขของ GDBHISTSIZE จะถูกละเว้นหาก ขนาดไม่ จำกัด หรือถ้า GDBHISTSIZE เป็นทั้งจำนวนลบหรือสตริงว่างแล้วจำนวนคำสั่ง gdb ช่วยในรายการประวัติไม่ จำกัด"

set history size <size>

set history remove-duplicates <count>คำสั่งที่เกี่ยวข้อง คำสั่งอธิบายว่า"ควบคุมการลบรายการประวัติที่ซ้ำกันในรายการประวัติคำสั่งหากการนับไม่ใช่ศูนย์ gdb จะมองย้อนกลับไปที่รายการประวัติการนับล่าสุดและลบรายการแรกที่ซ้ำกันของรายการปัจจุบัน เพิ่มลงในรายการประวัติคำสั่ง. ถ้านับไม่ จำกัด แล้ว lookbehind นี้อยู่มากมาย. ถ้านับเป็น 0 แล้วการกำจัดของรายการประวัติซ้ำเป็นคนพิการ"

set history remove-duplicates <count>

โดยค่าเริ่มต้น gdb บันทึกประวัติการเข้าสู่ ./.gdb_history ไฟล์ในไดเรกทอรีปัจจุบัน หากคุณต้องการให้ประวัติคำสั่งไม่ขึ้นอยู่กับไดเรกทอรีที่คุณใช้ให้รวมถึง:

set history filename ~/.gdb_history

4
เพิ่งพบสิ่งนี้เพื่อตัวเองและคิดว่าฉันจะแบ่งปันมันกับ SO
แฟรงค์

3
ในครั้งต่อไปมันเป็นเรื่องถูกกฎหมายอย่างสมบูรณ์ที่จะสร้างคำถามที่ตอบเองเช่นไม่ใช่วิกิชุมชน :)
Greg Hewgill

@Frank วิธีการเกี่ยวกับถ้าผมพิมพ์แล้วฉันลูกศรขึ้นที่สำคัญฉันได้รับคำสั่งก่อนหน้านี้ทั้งหมดที่เริ่มต้นด้วยn n
SIFE

ใน GDB 8.0.1 สิ่งนี้จะปรากฏขึ้นเพื่อทำงานโดยไม่มีการอนุญาตไฟล์พิเศษ
Ryan1729

7

หากคุณยังคงมีปัญหาตรวจสอบให้แน่ใจว่าตัวแปรสภาพแวดล้อม HISTSIZE ของคุณมีจำนวนสูงพอสมควร ของฉันว่างเปล่าทำให้การตั้งค่า "ขนาดประวัติ" ของ gdb เป็นค่าเริ่มต้นเป็น 0

ที่เพิ่ม

export HISTSIZE=100000000

ถึง ~ / .bashrc ของฉันและทุกอย่างก็บวม

คุณสามารถตรวจสอบการตั้งค่าประวัติ gdb ของคุณโดยทำ (ภายใน gdb) "แสดงประวัติ":

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.

จากเอกสาร :

ชุดประวัติศาสตร์ขนาดขนาด
ชุดขนาดประวัติศาสตร์ไม่ จำกัด
จำนวนชุดของคำสั่งที่ GDB ช่วยในรายการประวัติศาสตร์ ค่าเริ่มต้นนี้เป็นค่าของตัวแปรสภาพแวดล้อม HISTSIZE หรือ 256 หากไม่ได้ตั้งค่าตัวแปรนี้ หากขนาดไม่ จำกัด จำนวนคำสั่งที่ GDB เก็บไว้ในรายการประวัติจะไม่ จำกัด


ผมมีปัญหาเหมือนกัน. แม้จะใส่set history size 100ในไฟล์. gdbinit แต่ตัวแปรสภาพแวดล้อม HISTSIZE ยังคงทำให้ขนาดประวัติถูกตั้งค่าเป็นศูนย์ ปัญหาคือว่า gdb ไม่เข้าใจว่าHISTSIZE สามารถตั้งค่าให้ไม่ จำกัด
DavidW

ข้อผิดพลาด HISTSIZE ใน gdb ได้รับการแก้ไข ณ เดือนมิถุนายน 2558ไม่ใช่ว่าการเปลี่ยนแปลงนี้จะมีอยู่ในระบบของคุณ ในขณะเดียวกันหากHISTSIZEตั้งค่ามันจะต้องเป็น> 0 มิฉะนั้น gdb จะปิดการใช้งานประวัติ
Nate R.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.