คำถามติดแท็ก gdb

ใช้แท็กนี้สำหรับปัญหาที่เกี่ยวข้องหรือเกี่ยวข้องกับ GDB ซึ่งเป็นดีบักเกอร์มาตรฐานสำหรับระบบซอฟต์แวร์ GNU

1
พิมพ์ตัวแปรในรูปแบบเลขฐานสิบหกหรือฐานสิบ
ขณะนี้เมื่อฉันพิมพ์ค่าของตัวแปรvใน GDB ( print v) ฉันจะได้จำนวนเต็ม เป็นไปได้ไหมที่จะให้ GDB พิมพ์ตัวแปรจำนวนเต็มเป็นเลขฐานสิบหกหรือไบนารี
104 gdb 



4
จะโหลดโปรแกรมอ่าน stdin และรับพารามิเตอร์ใน gdb ได้อย่างไร?
ฉันมีโปรแกรมที่รับอินพุตจาก stdin และใช้พารามิเตอร์บางอย่างจากบรรทัดคำสั่ง ดูเหมือนว่า: cat input.txt > myprogram -path "/home/user/work" ฉันพยายามดีบักโค้ดด้วย gdb ภายใน emacs โดย Mx gdb ฉันพยายามโหลดโปรแกรมด้วยคำสั่ง: gdb cat input.txt > myprogram -path "/home/user/work" อย่างไรก็ตาม gdb ไม่ชอบ คำถาม cribbed จากที่นี่ น่าเสียดายที่ฉันไม่เข้าใจวิธีแก้ปัญหาและไม่แน่ใจว่าจะทำอย่างไรนอกเหนือจากการคอมไพล์ด้วย-gตัวเลือกและเรียกใช้คำสั่ง Mx gdb

4
เรียกใช้แอปพลิเคชันใน GDB จนกว่าจะมีข้อยกเว้นเกิดขึ้น
ฉันกำลังทำงานกับแอพพลิเคชั่นมัลติเธรดและต้องการดีบักโดยใช้ GDB ปัญหาคือหนึ่งในเธรดของฉันยังคงตายด้วยข้อความ: pure virtual method called terminate called without an active exception Abort ฉันรู้สาเหตุของข้อความนั้น แต่ฉันไม่รู้ว่ามันเกิดขึ้นที่ไหนในชุดข้อความ backtrace จะเป็นประโยชน์จริงๆ เมื่อฉันเรียกใช้แอปใน GDB แอปจะหยุดชั่วคราวทุกครั้งที่เธรดถูกระงับหรือกลับมาทำงานต่อ ฉันต้องการให้แอปของฉันทำงานต่อไปตามปกติจนกว่าเธรดใดเธรดหนึ่งจะตายโดยมีข้อยกเว้นนั้นเมื่อถึงจุดนั้นทุกอย่างควรหยุดเพื่อที่ฉันจะได้รับการย้อนกลับ

3
เราจะดูเนื้อหาของสแต็กด้วย GDB ได้อย่างไร
ฉันยังใหม่กับ GDB ดังนั้นฉันจึงมีคำถาม: ฉันจะดูเนื้อหาของสแต็กได้อย่างไร ตัวอย่าง: info registersดูเนื้อหาของการลงทะเบียนผมพิมพ์ สำหรับสแต็คควรเป็นอย่างไร? ฉันจะดูเนื้อหาของ$0x4(%esp)? เมื่อฉันพิมพ์print /d $0x4(%esp)GDB จะแสดงข้อผิดพลาด แพลตฟอร์ม: Linux และ GDB
102 c  assembly  gdb 


2
จะทำลายคำแนะนำในการประกอบตามที่อยู่ที่ระบุใน gdb ได้อย่างไร?
0x0000000000400448 <main+0>: push %rbp 0x0000000000400449 <main+1>: mov %rsp,%rbp 0x000000000040044c <main+4>: mov $0x6,%eax 0x0000000000400451 <main+9>: leaveq 0x0000000000400452 <main+10>: retq ฉันเหนื่อย: breaki 0x0000000000400448 แต่ดูเหมือนว่าจะไม่มีคำสั่งดังกล่าว gdb มีคุณสมบัติดังกล่าวหรือไม่?
97 assembly  gdb 

3
วิธีตั้งค่าเบรกพอยต์บนไลบรารีที่แชร์ในอนาคตด้วยแฟล็กคำสั่ง
ฉันกำลังพยายามทำให้เซสชัน gdb อัตโนมัติโดยใช้--commandแฟล็ก ฉันกำลังพยายามตั้งค่าเบรกพอยต์สำหรับฟังก์ชันในไลบรารีที่ใช้ร่วมกัน (เทียบเท่ากับ Unix ของ DLL) cmds.gdb ของฉันมีลักษณะดังนี้: set args /home/shlomi/conf/bugs/kde/font-break.txt b IA__FcFontMatch r อย่างไรก็ตามฉันได้รับสิ่งต่อไปนี้: shlomi: ~ / progs / bugs-external / kde / font-ทำลาย $ gdb --command = cmds.gdb ... GNU gdb 6.8-2mdv2009.0 (Mandriva Linux รีลีส 2009.0) ลิขสิทธิ์ (C) 2008 Free Software Foundation, Inc. ใบอนุญาต GPLv3 +: …
94 c++  c  linux  unix  gdb 

7
การตรวจสอบเนื้อหาคอนเทนเนอร์มาตรฐาน (std :: map) ด้วย gdb
สมมติว่ามีสิ่งนี้: #include <map> int main(){ std::map<int,int> m; m[1] = 2; m[2] = 4; return 0; } ฉันต้องการตรวจสอบเนื้อหาของแผนที่ที่รันโปรแกรมจาก gdb หากฉันลองใช้ตัวดำเนินการตัวห้อยฉันจะได้รับ: (gdb) p m[1] Attempt to take address of value not located in memory. การใช้วิธีค้นหาไม่ได้ผลลัพธ์ที่ดีกว่า: (gdb) p m.find(1) Cannot evaluate function -- may be inlined มีวิธีที่จะทำให้สำเร็จหรือไม่?
93 c++  stl  map  gdb 


5
gdb:“ ไม่มีการโหลดตารางสัญลักษณ์”
ฉันได้รับข้อความแสดงข้อผิดพลาดนี้เรื่อย ๆ เมื่อพยายามเพิ่มเบรกพอยต์ใน gdb ฉันใช้คำสั่งเหล่านี้เพื่อรวบรวม: gcc -g main.c utmpib2.c -o main.o and: cc -g main.c utmpib2.c -o main.o and also: g++ -g main.c utmpib2.c -o main.o ฉันลองใช้ "-ggdb" แทน "-g" ด้วยและฉันก็ยังคงได้รับข้อความแสดงข้อผิดพลาดนั้น จากนั้นฉันรัน gdb: $gdb ใน gdb: (gdb)exec-file main.o (gdb)break 59 No symbol table is loaded. Use the "file" command.
93 c  gdb 

5
จะเรียกใช้ไฟล์ปฏิบัติการใน GDB โดยอัตโนมัติได้อย่างไร
ฉันต้องการgdbเรียกใช้ไฟล์ปฏิบัติการทันทีราวกับว่าฉันพิมพ์คำว่า "run" (แรงจูงใจ: ฉันไม่ชอบพิมพ์ "run") วิธีหนึ่งคือไปป์คำสั่งเพื่อทำgdbสิ่งนี้: $ echo run | gdb myApp แต่ปัญหาของแนวทางนี้คือคุณสูญเสียการโต้ตอบกับgdbเช่น หากเบรกพอยต์ทริกเกอร์หรือmyAppขัดข้องให้gdbออก วิธีการนี้จะกล่าวถึงที่นี่ เมื่อดูตัวเลือกใน--helpฉันไม่เห็นวิธีที่จะทำ แต่บางทีฉันอาจพลาดบางอย่าง
92 gdb 

2
บันทึกไฟล์หลักใน gdb
เป็นไปได้ไหมที่จะบันทึก / ถ่ายโอนไฟล์หลักโดยใช้ gdb บางครั้งฉันต้องการบันทึกไฟล์เพื่อวิเคราะห์ในภายหลัง
91 gdb  core-file 

5
ความแตกต่างระหว่าง gcc -ggdb และ gcc -g คืออะไร
เมื่อฉันใช้ gcc เพื่อรวบรวมโปรแกรม C ฉันมักจะใช้-gเพื่อรับข้อมูลการดีบักลงในไฟล์ elf เพื่อให้ gdb สามารถช่วยฉันได้หากจำเป็น อย่างไรก็ตามฉันสังเกตเห็นว่าบางโปรแกรมใช้-ggdbเนื่องจากควรทำให้ข้อมูลดีบักเป็นมิตรกับ gdb มากขึ้น แตกต่างกันอย่างไรและแนะนำให้ใช้แบบไหน? หมายเหตุ:ลิงก์ไปยังตัวเลือกสำหรับการดีบักโปรแกรมของคุณหรือ GCC http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
91 gcc  gdb 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.