บางวันมาแล้วผมต้องคอมไพล์ด้วย gdb ด้วยตนเองเพื่อที่จะแก้ปัญหา app arm-linux มันค่อนข้างเป็นเรื่องเล็กน้อย แต่มันก็มีประโยชน์อย่างยิ่งที่ผมคิดว่ามันเป็นความคิดที่ดีที่จะโพสต์คำแนะนำได้ที่ด้านล่างนี้มีคำอธิบายเกี่ยวกับการดีบักระยะไกลด้วย KDevelop. This ทำด้วย gdb-6 8 คุณสามารถคว้าได้ที่นี่สันนิษฐานว่าเครื่องมือแขน linux มีอยู่ PATH อย่างถูกต้องตั้งค่า GDB client. Decompress gdb-6 8 และคอมไพล์โดย issuing หลังจากรวบรวมเพียง gdb gdb gdb ไปที่ arm-linux-gdb โดยที่ไฟล์ binchip toolchain ของแขน linux อยู่ที่นี่สำหรับองค์กรและการตั้งชื่ออย่างถูกต้องแล้วตอนนี้คุณสามารถลบไดเร็กทอรี gdb-6 8 ได้เช่นกันถ้าสถาปัตยกรรมคอมพิวเตอร์ที่โฮสต์ของคุณไม่ได้มาจาก x86 โดยถูกต้อง ค่าสำหรับ platformpiling เซิร์ฟเวอร์ของคุณ GDB ARM. Decompress gdb-6 8 และเรียบเรียงโดยการออกหลังจากรวบรวมเพียงคัดลอก gdbserver gdbserver gdbserver ไปยังแขนของระบบแฟ้มลินุกซ์เพื่อให้คุณสามารถรันได้จาก gdbserver เปลือกระยะไกลจะเป็นแขนเอลฟ์ ไบนารีตอนนี้คุณสามารถลบ g db-6 8 directory. First เซิร์ฟเวอร์ควรจะเริ่มต้นในโปรเซสเซอร์แขนโดยการออก what. What executable เป็นโปรแกรมที่จะได้รับการดีบั๊กและโฮสต์ 1234 บอก gdbserver เพื่อฟังการเชื่อมต่อกับพอร์ต 1234.To เรียกใช้ gdb เพียงแค่พิมพ์ นี้ในเปลือก PC หลังจากที่คุณจะได้รับพรอมต์ gdb เพื่อเชื่อมต่อกับประเภทเป้าหมายเพื่อดำเนินการต่อประเภทการดำเนินการต่อไปคุณจะได้รับภาพรวมเกี่ยวกับการใช้ gdb here. Debugging กับ KDevelop. KDevelop สามารถใช้เพื่อดูตัวแปรและแก้ปัญหา จุดวางเป้าหมายระยะไกลหยุดการทำงาน ฯลฯ เพียงไปที่โครงการ - ตัวเลือกโครงการและให้แน่ใจว่าคุณมีบางอย่างเช่นนี้ เป็นไฟล์ที่มีต่อไปนี้หลังจากที่คุณจะพร้อมที่จะแก้ปัญหาจากระยะไกลแขนใด ๆ - linux application. I am ใหม่สำหรับ Linux ฉันได้ดาวน์โหลด gdb-7 5 จาก resn GNU ฉันสร้าง gdb ในสภาพแวดล้อม Cygwin และฉันได้ข้อผิดพลาด ดังที่แสดงไว้ด้านล่างคำเตือนไม่พบห้องสมุดสาปแช่งที่เพิ่มขึ้นที่พบการปิดใช้งานการตรวจสอบ TUI สำหรับไลบรารีที่มี tgetent ไม่มีข้อผิดพลาดในการกำหนดค่าไม่มีไลบรารี termcap พบทำให้ 1 configure-gdb เกิดข้อผิดพลาด 1 ออก 1 ออกจากไดเรกทอรี xyz xyz ทำให้เกิดข้อผิดพลาดทั้งหมด 2 xyz xyz. I ได้อ้างถึงผู้อื่น ด้ายและฉันได้ติดตั้ง ncurses-5 9 แต่เมื่อฉันจะทำไฟล์ที่แล้วฉันได้รับข้อความแสดงข้อผิดพลาด like. collect2 ld กลับ 1 สถานะทางออกให้ 1 ข้อผิดพลาด 1 ทำ 1 ออกจากไดเรกทอรี xyz xyz ncurses-5 9 c ทำทั้งหมด ข้อผิดพลาด 2. ฉันยังพยายามที่จะดาวน์โหลดห้องสมุด termcap และเป็น buff successfually แต่เมื่อฉันจะสร้าง gdb - 7 5 แล้วมันแสดงให้ฉันเห็นข้อผิดพลาดเดียวกันตามที่อธิบาย above. So ถ้าใครมีความคิดวิธีการแก้ปัญหานี้ก็จะเป็น ใจดีขอบคุณล่วงหน้า การแก้จุดบกพร่องของ ross-target ด้วย GDB และ GDBserver ในทางทฤษฎีจีดีพีของดีบักเกอร์ GNU สามารถช่วยแก้ปัญหาการดีบักแอพพลิเคชันที่ทำงานบนระบบฝังตัวแบบลีนุกซ์ในทางปฏิบัติการตั้งค่า GDB สำหรับงานนี้เป็นเรื่องที่ต้องใช้เวลาสักเล็กน้อย ทำงานและมีอุปสรรคทางเทคนิคบางอย่างที่จะเอาชนะอย่างไรก็ตามประโยชน์ของการมีวิธีการตรวจแก้จุดบกพร่องอย่างมีระบบแทนที่จะคาดเดาสิ่งที่ผิดพลาดกับมันไกลเกินดุลความพยายามที่เกี่ยวข้องต่อไปนี้เป็นเคล็ดลับบางอย่างสำหรับการลดความยากลำบากมากกว่าการทำงานแบบเต็มรูปแบบ - blown ของ GDB บนแพลตฟอร์มเป้าหมายคุณสามารถใช้ GDBserver เป็นโปรแกรมที่ช่วยให้คุณสามารถรัน GDB บนเครื่องอื่นนอกเหนือจากที่โปรแกรมของคุณกำลังทำงานข้อดีของการใช้ GDBserver คือต้องการเพียงเศษเสี้ยวของทรัพยากรเป้าหมาย GDB ใช้เนื่องจากมีเพียงฟังก์ชันระดับต่ำของดีบักเท่านั้นคือการตั้งค่าจุดสั่งหยุดและการเข้าถึงตัวประมวลผลเป้าหมายลงทะเบียนและอ่านหน่วยความจำแอ็พพลิเคชันที่เขียน GDBserver ใช้การควบคุมของ th e โปรแกรมกำลัง debugged แล้วรอคำแนะนำจากระยะไกลเช่น GDB ทำงานในเวิร์กสเตชันพัฒนาโดยปกติเวิร์กสเตชันการพัฒนามีตัวประมวลผลที่แตกต่างกันกล่าวว่าตัวประมวลผลระดับ i686 กว่าแพลตฟอร์มเป้าหมายซึ่งอาจเป็น ARM PowerPC หรืออย่างอื่น ซึ่งหมายความว่าคุณไม่สามารถใช้ GDB executable ที่ติดตั้งไว้ในเวิร์กสเตชันได้คุณต้องการ debugger cross-target ในคำอื่น ๆ คุณต้องสร้าง GDB แบบกำหนดเองจาก source code. Budding GDB ตัวอย่างต่อไปนี้ใช้ PowerPC 7450 เป็นตัวประมวลผลเป้าหมายก่อนที่คุณจะเริ่มต้นคุณต้องมีส่วนติดต่อการสื่อสารระหว่างพีซีที่ใช้ GDB และแพลตฟอร์มเป้าหมายทั้งแบบอนุกรมหรือโดยเฉพาะอย่างยิ่งการเชื่อมต่อเครือข่ายอีเทอร์เน็ตคุณจำเป็นต้องมีเครื่องมือข้ามเป้าหมายที่จะรวบรวมคอมไพเลอร์ GNU C พร้อมกับ ไลบรารีรันไทม์ C และโปรแกรมอรรถประโยชน์ binary, aka binutils ที่รันบนเวิร์กสเตชันการพัฒนาและสร้าง executables สำหรับโปรเซสเซอร์เป้าหมายคุณจะสร้างไบนารีสองชุดจากแหล่ง GDB code. cross-target - ที่โฮสต์คือเวิร์กสเตชันการพัฒนาและเป้าหมายคือโปรเซสเซอร์เป้าหมาย - ที่ทั้งโฮสต์และเป้าหมายเป็นตัวประมวลผลเป้าหมายก่อนดาวน์โหลดซอร์สโค้ด GDB บีบอัดข้อมูลที่เก็บไว้และแกะออก GDB source package ใช้ GNU build system ซึ่งการสร้างไบนารีมักเป็นเพียงคำสั่งสองสามคำสั่งให้ตั้งค่า make make install แต่ในกรณีของเราเราจำเป็นจะต้องสร้างไบนารีสำหรับโปรเซสเซอร์สองตัวที่ต่างกันและติดตั้งไบนารีในตำแหน่งต่างๆ จะสร้างไบนารีในไดเร็กทอรีของตนเองแทนที่จะเป็นไดเร็กทอรีที่เราได้แยกแพคเกจมานอกจากนี้เราจะใช้ตัวเลือกบรรทัดคำสั่ง configure script เพื่อระบุโปรเซสเซอร์เป้าหมายและตัวประมวลผลและคำนำหน้าไดเรกทอรีการติดตั้ง ข้ามเป้าหมายไบนารีระบุสถาปัตยกรรมเป้าหมายด้วย - ตัวเลือกเป้าหมายตัวระบุสถาปัตยกรรมที่นี่ powerpc-7450-linux-gnu เป็นคำนำหน้าของทั้งหมดไบนารีข้ามไขว้ที่นี่ th e binary คอมไพเลอร์ข้ามคือ powerpc-7450-linux-gnu-gcc. Building เป้าหมาย - ไบนารีพื้นเมืองเป็น trickier สำหรับสิ่งหนึ่งที่คุณต้องระบุสถาปัตยกรรมโฮสต์เช่นเดียวกับสถาปัตยกรรมเป้าหมาย powerpc-7450-linux-gnu ปัญหาอื่นที่ขาดหายไปห้องสมุด - ไลบรารีบางตัวอาจไม่พร้อมใช้งานใน cross-toolchain และต้องสร้างขึ้นก่อนที่คุณจะพยายามสร้าง GDB เป้าหมายแบบดั้งเดิมตัวอย่างนี้แสดงวิธีการประสบความสำเร็จเมื่อคุณพบไลบรารี termcap แบบกำหนดเป้าหมายที่ขาดข้ามอาคาร นี่เป็นสิ่งที่จำเป็นถ้าแพลตฟอร์มเป้าหมายหายไปบางส่วนของไลบรารีที่ใช้ร่วมกันซึ่ง GDB และ GDBserver ขึ้นอยู่กับการดำเนินการตามปกติ แต่ executables ที่เกิดขึ้นมีขนาดใหญ่กว่าการเชื่อมโยงแบบไดนามิกคุณสามารถระบุการเชื่อมโยงแบบคงที่โดยการเพิ่มตัวเลือกคงที่กับตัวแปรสภาพแวดล้อม LDFLAGS ก่อนที่จะเรียกใช้การกำหนดค่าไลบรารีเพิ่มเติมใด ๆ ควรเป็น specifie d ทั้งใน LDFLAGS และ CPPFLAGS ดังต่อไปนี้ linker ของ GNU จะออกคำเตือนบางอย่างในระหว่างกระบวนการสร้างการใช้ฟังก์ชันบางอย่างเช่น dlopen, gethostbyname และอีกสองสามอย่างในแอ็พพลิเคชันที่เชื่อมโยงแบบสแตติกจะต้องรันไทม์ไลบรารีที่ใช้ร่วมกันจากไลบรารีรันไทม์ของ GNU C ใช้สำหรับการเชื่อมโยงคุณอาจต้องติดตั้งไลบรารีเหล่านี้บนแพลตฟอร์มเป้าหมายเมื่อคุณได้สร้าง GDBserver executable แล้วให้คัดลอกไปยังแพลตฟอร์มเป้าหมายคุณสามารถจัดเก็บพื้นที่เก็บข้อมูลบางส่วนได้โดยการลบข้อมูลดีบั๊กออกทั้งหมดโดยใช้ powerpc-7450 - linux-gnu-strip utility. Adapting ขั้นตอนการสร้างสำหรับโปรเซสเซอร์เป้าหมายที่แตกต่างกันควรเป็นเพียงเรื่องของการใช้ตัวระบุสถาปัตยกรรมที่แตกต่างกันเพื่อให้ง่ายต่อการดีบักคุณต้องคอมไพล์แอพพลิเคชันด้วยข้อมูลดีบั๊กโดยการให้ตัวเลือกบรรทัดคำสั่ง - g linker ของคอมไพเลอร์ไฟล์ปฏิบัติการที่สร้างขึ้นอาจใหญ่เกินไปเพื่อให้พอดีกับพื้นที่เก็บข้อมูลที่มีอยู่บนแพลตฟอร์มเป้าหมายดังนั้นก่อนที่จะย้ายไปอยู่ที่นั่น n ตัดข้อมูล debug จากสำเนาของมันโดยใช้ powerpc-7450-linux-gnu-strip และวางสำเนาที่ถูกปล้นออกบนแพลตฟอร์มเป้าหมายเวอร์ชัน stripped จะรันด้วย GDBserver บนแพลตฟอร์มเป้าหมายและสำเนาที่ไม่มีการลอกคือ ที่จะโหลดลงใน GDB ในเวิร์กสเตชันการพัฒนาการแก้จุดบกพร่อง RTem ค่อนข้างตรงไปตรงมาในแพลตฟอร์มเป้าหมายเปิดโปรแกรมกับ GDBserver ในขณะที่ระบุโฮสต์และพอร์ตสำหรับฟังการเชื่อมต่อ TCP ขาเข้าในเวิร์กสเตชันการพัฒนาเปิดข้ามเป้าหมาย GDB ตรวจสอบให้แน่ใจว่าได้ระบุไฟล์ปฏิบัติการที่ไม่ได้ถูกถอดออกที่คอนโซล GDB พิมพ์คำสั่งเหล่านี้จะเชื่อมต่อ GDB เข้ากับ GDBserver ที่ทำงานอยู่บนแพลตฟอร์มเป้าหมายวางเบรกพอยต์ไว้ที่จุดเริ่มต้นของโปรแกรมและปล่อยให้มันทำงานจนกว่าจะถึงที่ เบรกพอยต์ตัวแรกนอกจากนี้คุณยังสามารถแนบ GDBserver เข้ากับกระบวนการที่ใช้งานได้อยู่แล้วกระบวนการนี้จะหยุดทำงานและคุณสามารถแก้ปัญหาได้ด้วยคำสั่ง GDB. GDB ระยะไกลทำงานอย่างที่คาดไว้ในขณะที่แก้จุดบกพร่องโปรแกรมประยุกต์ระยะไกลพร้อมด้วย ข้อยกเว้นบางอย่าง - สะดุดตาที่สุดคือคำสั่ง run isn t used เนื่องจากโปรแกรมกำลังทำงานอยู่แล้วเมื่อคุณเริ่มเซสชันการตรวจแก้จุดบกพร่องมุมมองอื่นคือว่าถ้าโปรแกรมได้รับอนุญาตให้ทำงานต่อไปจนกว่าจะออกจากระบบ GDBserver ระยะไกลจะออกด้วยเช่นกันและ เซ็ตอัพระยะไกลจะยุติการตั้งค่าสภาพแวดล้อมการดีบักแบบรีโมตที่ใช้งานได้อาจดูเหมือนยุ่งยากเกินไปสำหรับบางคนหลังจากที่ไม่มีสิ่งใดเกิดขึ้น printf แต่ GDB สามารถติดตามและแก้ไขรหัสและการไหลเวียนข้อมูลและวิเคราะห์อย่างอื่น พฤติกรรมของรหัสของคุณโดยไม่ต้องเปลี่ยนอย่างชัดเจนใด ๆ มัน doesn t ขลังแก้ข้อผิดพลาด แต่แน่ใจว่า helps. Gdbserver แขนซื้อขายไบนารีด้วยเหตุนี้ฉันตัดสินใจที่จะรวบรวมรุ่นต้นน้ำและใช้ที่หนึ่งฉันจะแก้ปัญหาในโปรแกรมนี้ ตัวอย่างง่ายๆคือ GNU Hello ที่ไม่ได้ทำอะไรมากไปกว่าการพิมพ์ Hello World แต่เป็นตัวอย่างที่ดีของ Cross Compilation กับ GNU Autotools Gdbserver Arm Binary Trading gta 5 เป้าหมายการลอบสังหารหุ้น redwood trading ทำ wnload ไปยัง target path อย่างไรก็ตามเส้นทางระยะไกลและชื่อไบนารียังคงต้องระบุไว้เพื่อให้เราสามารถบอกได้ว่า gdbserver อยู่ที่ตำแหน่งไบนารีเพื่อที่จะปฏิบัติตามขั้นตอนนี้ฉันได้ติดตั้ง sudo apt-get install build-essential ddd cpio libncurses5-dev libsdl - dev zlib1g-dev wget chmod x arm-2010q1-202 arm-2010q1-202 ฉันติดตั้ง toolchain ไว้ในไดเร็กทอรีดีฟอลต์ รหัส Sourcery ฉันเดินเข้าไปในปัญหาบางอย่างดังนั้นฉันจะเขียนที่นี่ขั้นตอนที่ทำงานให้ฉัน qemu-system-arm เป็นซอฟต์แวร์ที่เลียนแบบแพลตฟอร์ม PB อเนกประสงค์ฉันพยายามที่จะใช้หนึ่งที่สามารถติดตั้งผ่านที่เก็บอูบุนตูแพคเกจ เป็น qemu-kvm-extras แต่มันแช่แข็งทำงานรุ่นล่าสุดของ Linux 2 6 35.gdbserver เป็นชิ้นส่วนของซอฟต์แวร์ที่ดำเนินการบางส่วนของฟังก์ชัน GDB stubs การแก้จุดบกพร่องแล้วมีความเป็นไปได้ที่จะเชื่อมต่อกับตัวอย่าง GDB เต็มรูปแบบผ่านทางเครือข่าย หรือผ่านทางพอร์ตอนุกรม DS-5 แสดงข้อผิดพลาด gdbserver เมื่อฉันพยายามที่จะดีบักห้องสมุด Android พื้นเมืองของฉัน C แอพพลิเคชันมาตรฐานอินเทอร์เฟซแบบไบนารีสำหรับ ARM 64 บิต Gdbserver Arm Binary การซื้อขาย Forex Candlesticks Made Easy Pdf อาณานิคมภาษาอังกฤษยืนยันในการกระทำที่เกิดขึ้นแบบไบนารีภายหลัง ใน 18 พยายามที่จะกีดกันการค้าโดยการ จำกัด การลงทุนในการซื้อขายนำเข้าและ R mwu ไบนารี gdbserver นี้ถูกสร้างขึ้นโดยใช้เนื่องจาก L มีการบังคับใช้การตรวจสอบความปลอดภัย PIE นี้ทำให้ L ไม่สามารถใช้ gdbserver bin ram-linux-androideabi-gdb ต่อไปฉันจะใช้เวอร์ชันล่าสุดของ Busybox ในบทแนะนำก่อนหน้านี้ฉันรวบรวมไว้แบบ statically แต่คราวนี้ฉันจะไม่ได้เพราะ gdbserver ที่ฉันต้องการใช้ห้องสมุดที่ต้องการแชร์อย่างไรก็ตามดาวน์โหลดไปยังเส้นทางเป้าหมายอย่างไรก็ตาม เส้นทางระยะไกลและชื่อไบนารีจะต้องระบุเพื่อให้เราสามารถบอกได้ว่า gdbserver มีที่ตั้งไบนารีเซิร์ฟเวอร์ GDB และไคลเอ็นต์มาจากคอลเลกชันคอมไพเลอร์ Code Sourcery สำหรับ ARM และคอมไพเลอร์ที่ใช้ในการคอมไพล์ซอฟต์แวร์สำหรับ ARM gdbserver ปฏิบัติการในกรณีของฉันสามารถพบได้ที่เส้นทางบ้าน francesco รหัส Sourcery SourceryG Lite แขนไม่มีลินุกซ์ gnueabi libc usr bin gdbserver Gdbserver แขน Binary เทรดดิ้ง wget tar xjf busybox-1 17 1bz2 cd busybox-1 17 1 ทำให้ ARCH แขน CROSSCOMPILE arm-none-linux-gnueabi - defconfig ให้ ARCH แขน CROSSCOMPILE arm-none-linux-gnueabi - ติดตั้ง cd รับ Fxcms ใหม่เพื่อคู่มือการซื้อขาย Forex อาณานิคมของอังกฤษยืนยันใน binary การกระทำครั้งต่อ ๆ ไปในปี 18 ทำให้กีดขวางการค้าโดย limi การใช้ประโยชน์จากการซื้อขายนำเข้าและคุณสมบัติหลัก ๆ ของปลั๊กอินปลั๊กอิน ARM Eclipse ของ GNU ได้แก่ ตัวเลือกแขนและตัวเลือกคอมไพเลอร์และเส้นทางขวาไปยังไบนารี toolchain ของ SEGGER J-Link probe ด้วย GDB แบบรวม server ผ่านทางปลั๊กอิน J-Link Intraday กลยุทธ์การซื้อขายหุ้นดาวน์โหลดเส้นทางไปยังปลายทางอย่างไรก็ตามเส้นทางระยะไกลและชื่อไบนารีจะต้องระบุเพื่อให้เราสามารถบอกได้ว่า gdbserver อยู่ที่ตำแหน่งไบนารีผลลัพธ์คือภาพ kernel ที่ถูกบีบอัดใน linux - ฉันต้องการใช้ gdbserver เพื่อเรียกใช้โปรแกรมภายใน QEMU จากนั้นเชื่อมต่อจากอินสแตนซ์ GDB ที่รันบนพีซีของฉันโดยใช้ลิงก์ TCP สิ่งที่ฉันต้องการจะได้รับจะแสดงในรูป Gdbserver ต่อไปนี้ แขนซื้อขายไบนารีแพลตฟอร์ม Forex บน Mac สีน้ำเงินหมายถึงซอฟท์แวร์ที่คอมไพล์เพื่อรันบน Ubuntu PC ของฉัน 32 บิต x86 ในขณะที่สีเขียวหมายถึงซอฟต์แวร์ที่คอมไพล์ให้ทำงานบน ARM Gdbserver Arm Binary Trading โปรดสังเกตว่าขั้นตอนต่อไปนี้ถูกเรียกใช้โดยเฉพาะใน f เก่าและไม่จำเป็นต้องเข้าถึง root จากนี้ไปฉันต้องการใช้ gdbserver เพื่อเรียกใช้โปรแกรมภายใน QEMU และจากนั้นฉันจะสามารถรันโปรแกรมโลก hello ได้ง่ายๆใน qemu-system-arm ยกเว้นไบนารี่เป็นอันดับแรก รุ่น kernel ใหม่จาก repositories อย่างเป็นทางการฉันต้องการจะแก้ปัญหาโปรแกรมลีนุกซ์ที่รันอยู่ภายในระบบ ARM จำลองด้วย QEMU Gdbserver Arm Binary Trading wget tar xzf qemu-0 12 5 gz cd qemu-0 12 5 configure --enable-sdl - เมื่อสิ้นสุดขั้นตอนเกี่ยวกับ 1 กิกะไบต์พื้นที่ฮาร์ดดิสก์ถูกใช้งานโบรกเกอร์ตัวเลือกไบนารีที่ดีที่สุดด้วย 5 เว็บไซต์ขั้นต่ำ Uk ผลที่เกี่ยวข้องคือโปรแกรม qemu -0 12 5 arm-softmmu qemu-system-arm ที่จะใช้เพื่อเลียนแบบแพลทฟอร์ม PB แบบอเนกประสงค์การนำข้อความไปโพสต์ล่าสุดข้อความแรกสร้าง GDB และ GDBserver สำหรับการแก้จุดบกพร่องข้าม 1 คำชี้แจงปัญหาฉันมี ARM GNU Linux บอร์ดและฉันต้องการที่จะสามารถแก้ปัญหาโปรแกรมที่ทำงานอยู่ในนั้นจากความสะดวกสบาย o f my x8664 เครื่อง GNU Linux ฉันจะสร้าง GDB และ GDBserver สำหรับสถานการณ์นี้ได้ฉันสับสนกับตัวเลือกการกำหนดค่าที่ฉันต้องการระบุฉันจำเป็นต้องข้ามคอมไพล์ GDB สำหรับ ARM ด้วย Help.2 สร้างโฮสต์เป้าหมายสิ่งที่เป็นส่วนใหญ่ GNU โปรแกรม GDB ใช้ Autoconf เป็นส่วนหนึ่งของระบบการสร้างที่นี่บทของ autoconf, automake และ libtool ทุกคนที่สร้างเครื่องมือข้ามควรอ่านทำตามลูกศรที่ถูกต้องโดยเฉพาะอย่างยิ่งการทำความเข้าใจความแตกต่างระหว่างการสร้างโฮสต์และเป้าหมายคือ อ่านบทที่เชื่อมโยงกันเหล่านี้ได้โปรดรอจนกว่าจะถึงตอนนั้นเมื่อคิดในแง่ของการจอดหน้าเครื่อง x8664 เรากล่าวว่า GDB ทำงานบนระบบโฮสต์ของคุณเครื่อง GNU Linux x8664 ในขณะที่ GDBserver ทำงานบนเป้าหมาย , เครื่อง ARM GNU Linux board อย่างไรก็ตาม GDB และ GDBserver เป็นโปรแกรมแยกต่างหากพวกเขาสร้างขึ้นมาแยกกันดังนั้นเราจึงต้องใช้ความแตกต่างของเป้าหมายสร้างโฮสต์สำหรับแต่ละขั้นตอนการสร้างแยกต่างหาก 3 เอาล่ะวิธีการนี้ใช้กับ GDB และ GDBserver ได้อย่างไร คุณต้องการ GDB ที่ r uns on x86 ด้วยการกำหนดค่า autoconf คุณใช้ --host เพื่อระบุตำแหน่งที่โปรแกรมจะทำงานดังนั้นในกรณีของคุณจะเป็น --host x8664-unknown-linux-gnu แต่ถ้าโปรแกรมนี้ตั้งใจจะทำงานในระบบเดียวกันคุณ กำลังสร้างจากนั้นคุณ don t ต้องระบุว่าเป็นค่าจะเลือกระบบของคุณเป็นค่าเริ่มต้นสำหรับ - โดยอัตโนมัติสิ่งที่คุณต้องการคือการทำให้มันเพื่อให้ GDB สร้างเข้าใจวิธีการตรวจแก้จุดบกพร่องโปรแกรม ARM GNU Linux นี่คือที่ - - เป้าหมายมาพร้อมสมมติว่าคุณมีแขนกิกะไบต์ที่มีอยู่บนโฮสต์สำหรับการพัฒนา x8664 ของคุณซึ่งใช้สำหรับสร้างโปรแกรมที่ทำงานบนชื่อไฟล์ของบอร์ด ARM อาจแตกต่างกันออกไปแม้กระทั่งสำหรับ ARM GNU Linux จากไฟล์ของคอมไพเลอร์ ชื่อหรือจากการเรียกใช้ arm-linux-gnueabi-gcc - v มองหาบรรทัดเป้าหมายในเอาท์พุทเราจะเห็นว่า gcc ถูกกำหนดค่าด้วย --target arm-linux-gnueabi เราจะส่งค่าเดียวกันไปที่ GDB s กำหนดค่า เสร็จสิ้นนั่นแหล่ะคุณจะเห็นบางอย่างเช่นนี้ถ้าคุณไม่ระบุ - กำหนดเป้าหมายแล้วกำหนดค่า e script จะเริ่มต้นระบบเป้าหมายไปยังระบบเดียวกันที่คุณสร้างใหม่ในกรณีนี้จะเป็น x8664-unknown-linux-gnu ซึ่งไม่ใช่สิ่งที่เราต้องการ 3 2 สำหรับ GDBserver ดังนั้นอีกครั้ง GDBserver จะรันบนเครื่องเป้าหมาย ARM GNU Linux หนึ่งคุณสามารถคัดลอกแหล่งที่มาผ่านเครื่อง ARM GNU Linux และสร้างได้ที่นั่นเส้นทางมาตรฐานสำหรับ gdb gdbserver กำหนดค่าให้ทำการติดตั้งจะทำงานได้ดีอย่างไรก็ตามคุณต้องการสร้าง GDBserver ในความสะดวกสบายของ GNU x8664 ของคุณ โฮสต์ Linux คุณมีคอมไพเลอร์ ARM ข้ามที่มีประโยชน์หลังจากทั้งหมดขวา Recapping จาก autoconf s สร้างความแตกต่างเป้าหมายโฮสต์ - โฮสต์ถูกใช้เพื่อระบุตำแหน่งที่โปรแกรมทำงานบิงโกเนื่องจาก GDBserver จะทำงานบน ARM คุณผ่าน - host แขน linux - gnueabi เพื่อ GDBserver กำหนดค่าคุณจะได้รับสิ่งที่ชอบ แต่ทำไมไม่ --target โอเคคุณต้องอ่านเป้าหมายของโฮสต์ที่แตกต่างออกไปอีกครั้ง - เป้าหมายไม่เหมาะสำหรับ GDBserver เพราะไม่ใช่เครื่องมือข้าม - มันรู้วิธีแก้ปัญหาโปรแกรมในระบบของตัวเอง s ไม่แตกต่างจากโปรแกรมอื่น ๆ ส่วนใหญ่ที่ทำงานบนระบบ ARM เช่น grep, sed เป็นต้นดังนั้นคุณสามารถสร้างข้ามได้เช่นเดียวกับโปรแกรมกำหนดค่า autoconf อื่น ๆ ทั้งหมด 4 การแก้ไขปัญหา 4 1 ใช้คอมไพเลอร์ระบบถ้าคุณได้กำหนดค่าด้วย - host host แต่ให้ใช้ gcc ของระบบแทนที่จะเป็น host-gcc ตรวจสอบให้แน่ใจว่าหลังสามารถพบได้ใน PATH ของคุณและคุณสามารถรันได้เช่น try arm-unknown-linux-gnueabi-gcc - v และเริ่มต้นด้วยเหตุผล คือว่าถ้ากำหนดค่า doesn t หาโฮสต์ที่ใช้งานได้ - gcc แล้วมันตรงกลับไปที่ gcc ดูที่นี่สำหรับข้อมูลเพิ่มเติม 5 เกี่ยวกับการแยกสร้าง dirs. Final ทราบคุณ don t ต้อง แต่ผมขอแนะนำให้สร้างในไดเรกทอรีสร้างแยกจาก แหล่งเช่นไดเรกทอรีย่อยสำหรับ gdb ใน gdb build-gdb. Build directory สำหรับ gdbserver ใน gdb build-gdbserver. Cd ลงใน gdbserver gdb build gdb และทำ gdbserver gdb gdb src วิธีนี้เมื่อใดก็ตามที่คุณต้องการจะสร้างจากรอยขีดข่วนคุณเพียงแค่ต้องเช็ด rm - rf สร้างไดเร็กทอรีไม่นานการเรียนรู้สิ่งนี้อย่างถูกต้องจะแปลเป็น ข้ามการสร้างโปรแกรมและไลบรารีที่ใช้ autoconf GNU ทุกประเภทดังนั้นจึงควรมีทักษะที่ควรค่าแก่การทำเช่นนี้เพื่อให้ recap. For GDB ตั้งค่าคอนฟิก --etarget arm-linux-gnueabi เรียกใช้การกำหนดค่าขั้นสูงสำหรับเส้นทางที่กำหนดค่า gdb-src สำหรับ GDBserver จะกำหนดค่า --host arm-linux-gnueabi เรียกใช้ GDBserver s กำหนดค่าสำหรับเส้นทางนั้นไปยัง gdb-src gdb gdbserver configure ไม่ได้ BuildingCrossGDBandGDBserver PedroAlves 2015-08-14 16 26 41. เนื้อหาทั้งหมด C 2008 Free Software Foundation สำหรับข้อกำหนดในการให้บริการ แจกจ่ายและแก้ไขโปรดดูหน้า WikiLicense หน้า 21 GDB และ OpenOCD. OpenOCD สอดคล้องกับโปรโตคอล gdbserver ระยะไกลและสามารถใช้เพื่อแก้จุดบกพร่องเป้าหมายระยะไกลการตั้งค่า GDB เพื่อทำงานร่วมกับ OpenOCD อาจมีส่วนประกอบหลายอย่าง OpenOCD การสนับสนุนเซิร์ฟเวอร์ f หรือ GDB อาจจำเป็นต้องได้รับการกำหนดค่าดูการกำหนดค่า GDB การสนับสนุน GDB ของ OpenOCD อาจต้องมีการกำหนดค่าดังที่แสดงในบทนี้หากคุณมีสภาพแวดล้อม GUI เหมือน Eclipse อาจต้องมีการกำหนดค่าด้วยแน่นอนเวอร์ชันของ GDB ที่คุณใช้จะต้องเป็นตัวที่สร้างขึ้นมาเพื่อทราบเกี่ยวกับ CPU เป้าหมายที่คุณกำลังใช้อยู่อีกครั้งมันอาจเป็นส่วนหนึ่งของห่วงโซ่เครื่องมือที่คุณใช้อีกครั้งตัวอย่างเช่นถ้าคุณกำลังพัฒนา Cross-ARM บนเครื่องคอมพิวเตอร์ x86 แทน ของการใช้คำสั่ง x86 gdb แบบ native ที่คุณอาจใช้ ram-none-eabi-gdb ถ้าโซ่เครื่องมือใช้ในการคอมไพล์โค้ดของคุณ 21 1 การเชื่อมต่อกับ GDB. Use GDB 6 7 หรือใหม่กว่าด้วย OpenOCD ถ้าคุณประสบปัญหาเช่น GDB 6 3 มีข้อผิดพลาดที่รู้จักกันดีซึ่งก่อให้เกิดข้อผิดพลาดในการเข้าถึงหน่วยความจำปลอมซึ่งได้รับการแก้ไขแล้วเห็น Openpd สามารถสื่อสารกับ GDB ได้สองวิธีโดยปกติแล้วซ็อกเก็ต TCP IP จะเริ่มต้นตามปกติซึ่งจะทำให้ GDB เชื่อมต่อกับ gdbserver บนเครื่องพีซีโดยใช้พอร์ต 3333. นอกจากนี้ยังสามารถใช้ GDB e xtended โปรโตคอลระยะไกลดังต่อไปนี้การเชื่อมต่อท่อมักจะเริ่มต้นดังต่อไปนี้ซึ่งจะทำให้ GDB ทำงาน OpenOCD และสื่อสารโดยใช้ stdin stdout stdin ใช้วิธีนี้มีประโยชน์จาก GDB เริ่มต้นการหยุด OpenOCD สำหรับ logoutput ดีบักเซสชันส่งล็อกเอาต์พุตไปยัง ไฟล์เพื่อให้แน่ใจว่าท่อไม่อิ่มตัวเมื่อใช้เอาต์พุตระดับดีบักที่สูงขึ้นเพื่อดูรายการคำสั่ง OpenOCD คำสั่งชนิดช่วยในบรรทัดคำสั่งของ GDB.21 ตัวอย่างการเริ่มต้นเซสชัน GDB โดยใช้โปรโตคอลระยะไกลช่วง GDB เริ่มแตกต่างกันเล็กน้อย นี่เป็นตัวอย่างที่แสดงวิธีการเริ่มต้นเซสชันการตรวจแก้จุดบกพร่องด้วยโปรแกรม ARM ขนาดเล็กในกรณีนี้โปรแกรมเชื่อมโยงกับโหลดลงใน SRAM บน Cortex-M3 โปรแกรมส่วนใหญ่จะเขียนลงในที่อยู่แฟลช 0 และ ทำงานจากที่นั่นคุณสามารถขัดจังหวะช่วง GDB เพื่อให้โปรแกรมหยุดพิมพ์ตำแหน่งที่จะแสดงสแต็ครายการเพื่อแสดงรหัสรอบเคาน์เตอร์โปรแกรมขั้นตอนผ่านทางรหัสตั้งค่า breakpoin ts หรือ watchpoints เป็นต้น 2.1 การกำหนดค่า GDB สำหรับ OpenOCD. OpenOCD สนับสนุนแพ็คเก็ต qSupported gdb ทำให้ข้อมูลถูกส่งโดยเซิร์ฟเวอร์ระยะไกลของ GDB เช่น OpenOCD ไปเป็น GDB ข้อมูลทั่วไปประกอบด้วยขนาดแพ็กเก็ตและแผนที่หน่วยความจำของอุปกรณ์คุณทำ ไม่จำเป็นต้องกำหนดค่าขนาดแพ็คเก็ตด้วยมือและส่วนที่เกี่ยวข้องของแผนที่หน่วยความจำควรจะตั้งขึ้นโดยอัตโนมัติเมื่อคุณประกาศ NOR flash banks อย่างไรก็ตามมีสิ่งอื่น ๆ ที่ GDB สามารถค้นหาได้ในขณะนี้คุณอาจต้องตั้งค่าเหล่านี้โดย OpenOCD เริ่มทำงานคุณมักจะเห็นข้อความรายงานบางอย่างเช่นคุณสามารถส่งผ่านข้อมูลดังกล่าวไปยัง GDB ได้โดยใช้คำสั่งเหล่านี้ด้วยฮาร์ดแวร์เฉพาะ Cortex-M3 จุดพักของฮาร์ดแวร์ทำงานเฉพาะสำหรับโค้ดที่เรียกใช้จากหน่วยความจำแฟลชระบบ ARM ส่วนใหญ่จะทำ ไม่มีข้อ จำกัด ดังกล่าวอีกตัวอย่างหนึ่งของการกำหนดค่า GDB ที่เป็นประโยชน์มาจากผู้ใช้ที่พบว่าการเหยียบ Cortex-M3 ของเขาไม่ทำงานได้ดีกับ IRQs และ RTOS จนกว่าเขาจะบอกให้ GDB ปิดใช้งาน IRQs ขณะที่ ste pping มากกว่าการพิมพ์คำสั่งดังกล่าวโต้ตอบคุณอาจต้องการบันทึกไว้ในไฟล์และมี GDB ดำเนินการตามที่เริ่มต้นอาจใช้ในไดเรกทอรีโครงการของคุณหรือเริ่ม GDB โดยใช้ gdb - x filename.21 4 การเขียนโปรแกรมโดยใช้ GDB. By ค่าเริ่มต้นของแผนที่หน่วยความจำเป้าหมายจะถูกส่งไปยัง GDB ซึ่งสามารถใช้งานได้โดยใช้ตัวเลือกการกำหนดค่า OpenOCD ต่อไปนี้เพื่อให้สามารถกำหนดค่าแฟลชที่ถูกต้องได้ใน OpenOCD เพื่อให้ได้ประสิทธิภาพที่รวดเร็วยิ่งขึ้นคุณควรกำหนดค่าพื้นที่ทำงานที่ถูกต้องเช่น GDB แผนที่หน่วยความจำของเป้าหมายจะช่วยให้ GDB สามารถป้องกันพื้นที่แฟลชของเป้าหมายได้โดยใช้ค่าดีฟ้อลท์ของฮาร์ดแวร์โดยค่าเริ่มต้นนั่นหมายความว่าตัวเลือก OpenOCD gdbbreakpointoverride ไม่จำเป็นต้องใช้เมื่อใช้แผนที่หน่วยความจำดู gdbbreakpointoverride เพื่อดูแผนที่หน่วยความจำที่กำหนดค่าไว้ใน GDB, ใช้ข้อมูลคำสั่งของ GDB แอดเดรสอื่นที่ไม่ได้รับมอบหมายภายใน GDB จะถือว่าเป็น RAM. GDB 6 8 ขึ้นไปกำหนดพื้นที่หน่วยความจำที่ไม่อยู่ในแผนที่หน่วยความจำให้ไม่สามารถเข้าถึงได้ anged กับพฤติกรรมเก่าโดยใช้คำสั่ง GDB ต่อไปนี้หากเปิดใช้ gdbflashprogram GDB จะสามารถเขียนโปรแกรมหน่วยความจำแฟลชใด ๆ โดยใช้อินเตอร์เฟส vFlash ได้ GDB จะดูแผนที่หน่วยความจำเป้าหมายเมื่อโหลดคำสั่งถ้ามี พื้นที่ที่จะตั้งโปรแกรมอยู่ภายในพื้นที่เป้าหมายแฟลชจะใช้แพ็คเก็ต vFlash หากต้องการกำหนดค่าเป้าหมายก่อนการเขียนโปรแกรม GDB สามารถเรียกใช้สคริปต์เหตุการณ์เพื่อตรวจสอบการเขียนโปรแกรมแฟลชได้สามารถใช้ส่วนเปรียบเทียบคำสั่ง GDB ได้ 21 การใช้ OpenOCD SMP กับ GDB สำหรับการสนับสนุน SMP ตามแพ็คเก็ตโปรโตคอล GDB ได้รับการกำหนดเรียบร้อยแล้ว jj - smp request. j - smp set request. jc packet สำหรับอ่าน ID หลักที่แสดงโดยการเชื่อมต่อ GDB Reply XXXXXXXX 8 หลัก hex ให้ ID หลักหรือ E01 สำหรับเป้าหมายไม่ smp. JcXXXXXXXX 8 หลักฐานสิบหกแพ็คเก็ตสำหรับการตั้งค่า ID หลักที่แสดงที่ถัดไป GDB ต่อหลัก id -1 ถูกสงวนไว้สำหรับการกลับไปยังโหมดการทำงานตามปกติตอบ E01 สำหรับเป้าหมายไม่ smp หรือตกลงเมื่อประสบความสำเร็จการจัดการของแพ็กเก็ตนี้ภายใน GDB สามารถทำได้โดยการสร้างตัวแปรภายในของตัวแปรหลักโดยพิจารณาจากฟังก์ชัน allocatecomputedvalue ที่อนุญาตให้ใช้คำสั่ง GDB ต่อไปนี้โดยใช้คำสั่งบำรุงรักษา GDB ตามที่อธิบายไว้ในตัวอย่าง 2 cpus ใน SMP ที่มี id หลัก 0 และ 1 ดูกำหนดเป้าหมาย CPU ที่ทำงานได้ ใน SMP.21 6 สนับสนุน RTOS. OpenOCD รวมถึงการสนับสนุน RTOS ซึ่งจะต้องเปิดใช้งานเนื่องจากค่าดีฟอลต์จะถูกปิดใช้งานสามารถเปิดใช้งานได้โดยการส่งต่อ - rtos arg ไปยังเป้าหมายดู RTOS Type. See Debugging Programs ที่มีหลายเธรดในคู่มือ GDB สำหรับรายละเอียด เกี่ยวกับคำสั่ง GDB ที่เกี่ยวข้องการตั้งค่าตัวอย่างด้านล่างนี้จะพยายามตรวจหา RTOS ภายในแอ็พพลิเคชันของคุณโดยอัตโนมัติสนับสนุน rtos ที่มีอยู่ในปัจจุบันรวมทั้งการแจ้งเตือนก่อนที่ RTOS จะสามารถตรวจจับได้ต้องส่งออกสัญลักษณ์บางอย่างไม่เช่นนั้น OpenOCD ไม่สามารถใช้งานได้ ด้านล่างเป็นรายการสัญลักษณ์ที่จำเป็นสำหรับแต่ละ RTOS. txthreadcurrentptr, txthreadcreatedptr, txthreadcreatedcount. FreeRTOS สัญลักษณ์สัญลักษณ์ linux, chdebug, chSysInit. Rtos sCurrentTask, Rtos sLi rtos sListSleep, Rtos sListSuspended, Rtos sMaxPriorities, Rtos sCurrentTaskCount. OSRunning, OSTCBCurPtr, OSTaskDbgListPtr, OSTaskQty สำหรับ RTOS ส่วนใหญ่ที่สนับสนุนสัญลักษณ์ข้างต้นจะถูกส่งออกโดยค่าเริ่มต้นอย่างไรก็ตามสำหรับบางส่วนเช่น FreeRTOS และ uC OS-III ขั้นตอนพิเศษต้องเป็น RTOSes เหล่านี้อาจต้องการไฟล์ OpenOCD เพิ่มเติมที่จะเชื่อมโยงกับโครงการ
No comments:
Post a Comment