Eclipse CDT และ gdb มีความคิดเห็นที่แตกต่างกันเกี่ยวกับตำแหน่งของไฟล์ต้นฉบับ

ฉันทำสิ่งต่อไปนี้:

  1. อิมพอร์ตโปรเจ็กต์ Makefile ไปยัง Eclipse CDT
  2. คอมไพล์โปรแกรมจากบรรทัดคำสั่งโดยใช้ตัวเลือก -ggdb ของ g++
  3. รันโปรแกรมจากบรรทัดคำสั่ง
  4. ตั้งค่าเบรกพอยต์ใน Eclipse CDT
  5. แนบดีบักเกอร์ Eclipse CDT (gdb) เข้ากับกระบวนการลูกที่โปรแกรมของฉันสร้าง (กระบวนการลูกรันโปรแกรมจากโปรเจ็กต์เดียวกัน)

ณ จุดนี้ฉันได้รับข้อความแสดงข้อผิดพลาดในคอนโซล

ไม่มีไฟล์ต้นฉบับชื่อ /home/oswald/Eclipse/CDT/Workspace/Project/path/to/header.h

เมื่อฉันดำเนินโปรแกรมต่อ เบรกพอยท์ของฉันทั้งหมดจะถูกข้ามไป ฉันจะทำให้เบรกพอยท์ของฉันทำงานได้อย่างไร?

หมายเหตุเพิ่มเติมบางประการ:

  • ไม่มีไลบรารีที่ใช้ร่วมกันที่เกี่ยวข้อง
  • คราสอินดิโก, gdb 7.4, Ubuntu 12.04
  • การใช้บรรทัดคำสั่งเพื่อแนบ gdb กับกระบวนการ ฉันสามารถตั้งค่าเบรกพอยต์เป็น header.h:257 (header.h อยู่ในโฟลเดอร์ /home/oswald/Eclipse/CDT/Workspace/Project/path/to/) gdb จะให้เกียรติเบรกพอยต์นี้
  • เมื่อใช้บรรทัดคำสั่งเพื่อแนบ gdb กับกระบวนการ ฉัน ไม่สามารถ ตั้งค่าเบรกพอยต์เป็น /home/oswald/Eclipse/CDT/Workspace/Project/path/to/header.h:257 ฉันได้รับข้อความเดียวกันจาก gdb เช่นเดียวกับเมื่อใช้ Eclipse CDT
  • Eclipse CDT ใช้ GDB (DSF) Attach to Process Launcher การสลับไปใช้ Standard Attach to Process Launcher ทำให้เกิดข้อความแสดงข้อผิดพลาดว่าระบบไม่สามารถแสดงรายการกระบวนการที่กำลังทำงานอยู่ได้
  • เส้นทางการค้นหาแหล่งที่มาในการกำหนดค่าการดีบักถูกตั้งค่าเป็นค่าเริ่มต้น (เส้นทางไฟล์สัมบูรณ์, เส้นทางไฟล์ Realtive ของโปรแกรม, โครงการ) ฉันทดลองใช้การตั้งค่าอื่นๆ มากมาย แต่ก็ไม่ได้ผลเลย

person Oswald    schedule 26.11.2012    source แหล่งที่มา


คำตอบ (1)


เพื่อเป็นการหลีกเลี่ยงปัญหา ฉันได้เขียนเชลล์สคริปต์ที่สร้างไฟล์ .gdbinit ซึ่งมีรายการไดเร็กทอรีที่เหมาะสม:

#!/bin/sh

PROJECT=/home/oswald/Eclipse/CDT/Workspace/Project

find $PROJECT -name "*.h*" -o -name "*.c*" \
  | sed 's:/[^/]*$::' \
  | sort \
  | uniq \
  | sed 's/^/directory /' > $PROJECT/.gdbinit

และกำหนดค่า Eclipse CDT เพื่อใช้ไฟล์ .gdbinit นั้น

person Oswald    schedule 26.11.2012
comment
ไม่แน่ใจว่าจะเป็นประโยชน์กับใครโดยสิ้นเชิงหรือไม่ แต่ฉันสามารถใช้สิ่งนี้เพื่อทำสิ่งเดียวกันได้ ยกเว้นซับซ้อนกว่าเล็กน้อย ฉันจำเป็นต้องแยกโฟลเดอร์ svn และ CMake ที่ไม่มีประโยชน์ออกไปจำนวนหนึ่ง และรวมเฉพาะไฟล์ต้นฉบับในสองโปรเจ็กต์เฉพาะในพื้นที่ทำงานของฉัน นี่คือไฟล์ของฉัน: find $PROJECT \! \( -type d \( -path "*svn*" -o -path "*CMake*" -o -path "*.dir" \) -prune \) -type f \( -path "*/Ae9Ap9Mpi/*" -o -path "*/SpWx/*" \) \( -name "*.h*" -o -name "*.c*" \) \ | sed 's:/[^/]*$::' \ | sort \ | uniq \ | sed 's/^/directory /' > $PROJECT/.gdbinit - person xjsc16x; 25.04.2018