ฉันพยายามดีบักโปรแกรมด้วย gdb ใน Raspbian แต่ทั้งหมดที่ฉันได้คือ:
Program received signal SIGILL, Illegal instruction.
0xb6fe8acc in ?? () from /lib/ld-linux-armhf.so.3
ไม่ช่วยตั้งค่าจุดSIGILL
จับเป็นnostop
( handle SIGILL nostop
):
Program received signal SIGILL, Illegal instruction.
Program terminated with signal SIGILL, Illegal instruction.
The program no longer exists.
backtrace ทั้งหมดที่ฉันได้รับคือ:
#0 0xb6fe8acc in ?? () from /lib/ld-linux-armhf.so.3
#1 0x00000000 in ?? ()
หากฉันเริ่มโปรแกรมนอก gdb ฉันจะได้รับข้อยกเว้น C ++ ปกติ (ที่ฉันต้องการแก้ปัญหา)
ซอฟต์แวร์ทั้งหมดได้รับการอัพเดตเป็นเวอร์ชั่นล่าสุดจากที่เก็บ raspbian ต่อไปฉันลองใช้เคอร์เนล raspberry pi รากฐาน "3.18.9+" และเคอร์เนล raspbain "3.18.0-trunk-rpi" (ฉันต้องการโมดูลเคอร์เนลแบบกำหนดเอง) ฉันสามารถดีบักโปรแกรมเดียวกันบนเครื่องหลักได้โดยไม่มีปัญหา
อัปเดต:การดีบักทำงานตามที่คาดไว้กับเคอร์เนล "3.12-1-rpi"
อะไรเป็นสาเหตุของข้อผิดพลาดนี้?
@mpromonet เนื่องจาก
—
someonr
pass
เป็นค่าเริ่มต้นจึงไม่ควรสร้างความแตกต่างและไม่ได้ทำให้เกิดผลใด ๆ ผลลัพธ์เช่นเดียวกับhandle SIGILL nostop
และไม่มี backtrace ที่มีความหมาย (
—
goldilocks
bt
)? ฉันคิดว่าคุณต้องคิดถึงบริบทเพิ่มเติมที่นี่หากคุณคาดหวังว่าจะมีคนอธิบาย "สิ่งที่ทำให้เกิดข้อผิดพลาดนี้" ยึดตามคำสั่งที่ผิดกฎหมายในตัวเชื่อมโยง / ตัวโหลด ( ld-linux-armhf
)
ฉันไม่สามารถรับ backtrace ที่มีความหมายได้ (ดูคำถามที่แก้ไขแล้ว) ฉันจะพยายามสร้างตัวอย่างเล็ก ๆ นอกจากนี้ฉันสับสนว่าฉันไม่ได้รับ opcode ที่ผิดกฎหมายหากไม่มี gdb
—
คนที่
สแต็คดูเหมือนถูกทุบ valgrind สามารถช่วยได้
—
mpromonet
handle SIGILL pass nostop
หรือยัง