ฉันจะรับ backtrace สำหรับเธรดทั้งหมดใน GDB ได้อย่างไร


151

มีคำสั่งที่เทียบเท่าใน GDB กับของ WinDbg's "! process 0 7" หรือไม่?

ฉันต้องการแยกเธรดทั้งหมดในไฟล์ดัมพ์พร้อมกับ backtraces ใน GDB "เธรดข้อมูล" จะไม่แสดงผลการติดตามสแต็ก ดังนั้นมีคำสั่งที่ทำหรือไม่


13
คำสั่งที่สอดคล้องกันสำหรับ LLDB คือbt all - ในกรณีที่มีคนพบสิ่งนี้ผ่านทาง Google (ผู้ที่คิดว่า GDB == LLDB)
kennytm

ด้วย python งานต่อไปนี้ "(gdb) python สำหรับเธรดใน gdb.selected_inferior (). threads (): thread.switch (); print (thread.num); gdb.execute ('where')"
Talespin_Kit

คำตอบ:


244

โดยทั่วไปแล้ว backtrace ใช้เพื่อรับสแต็กของเธรดปัจจุบัน แต่ถ้าจำเป็นที่จะต้องติดตามสแต็กของเธรดทั้งหมดให้ใช้คำสั่งต่อไปนี้

thread apply all bt

12
ในการบันทึกผลลัพธ์ไปยังไฟล์:gdb <binary> <coredump> -ex "thread apply all bt" -ex "quit" > output.log
Doomsday

1
คุณสามารถย่อให้เหลือt a a bt
qbolec

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