Skip to content

Commit 17328be

Browse files
committed
Jenkins attach GDB and print back trace on failure
1 parent 258cde6 commit 17328be

File tree

3 files changed

+71
-76
lines changed

3 files changed

+71
-76
lines changed

.ci/Jenkinsfile-hardware

Lines changed: 18 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pipeline {
2121
sh 'make cubepilot_cubeorange_test'
2222
sh 'make cubepilot_cubeorange_test bootloader_elf'
2323
sh 'ccache -s'
24-
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/upload_jlink_gdb.sh, Tools/HIL/*.py', name: 'cubepilot_cubeorange_test'
24+
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/*, Tools/HIL/*.py', name: 'cubepilot_cubeorange_test'
2525
}
2626
post {
2727
always {
@@ -70,6 +70,7 @@ pipeline {
7070
}
7171
post {
7272
always {
73+
sh './platforms/nuttx/Debug/jlink_gdb_backtrace.sh build/cubepilot_cubeorange_test/cubepilot_cubeorange_test.elf || true'
7374
resetBoard()
7475
}
7576
}
@@ -91,7 +92,7 @@ pipeline {
9192
sh 'make cuav_x7pro_test'
9293
sh 'make cuav_x7pro_test bootloader_elf'
9394
sh 'ccache -s'
94-
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/upload_jlink_gdb.sh, Tools/HIL/*.py', name: 'cuav_x7pro_test'
95+
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/*, Tools/HIL/*.py', name: 'cuav_x7pro_test'
9596
}
9697
post {
9798
always {
@@ -138,6 +139,7 @@ pipeline {
138139
}
139140
post {
140141
always {
142+
sh './platforms/nuttx/Debug/jlink_gdb_backtrace.sh build/cuav_x7pro_test/cuav_x7pro_test.elf || true'
141143
resetBoard()
142144
}
143145
}
@@ -159,7 +161,7 @@ pipeline {
159161
sh 'make px4_fmu-v3_test'
160162
sh 'make px4_fmu-v3_test bootloader_elf'
161163
sh 'ccache -s'
162-
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/upload_jlink_gdb.sh, Tools/HIL/*.py', name: 'px4_fmu-v3_test'
164+
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/*, Tools/HIL/*.py', name: 'px4_fmu-v3_test'
163165
}
164166
post {
165167
always {
@@ -206,6 +208,7 @@ pipeline {
206208
}
207209
post {
208210
always {
211+
sh './platforms/nuttx/Debug/jlink_gdb_backtrace.sh build/px4_fmu-v3_test/px4_fmu-v3_test.elf || true'
209212
resetBoard()
210213
}
211214
}
@@ -227,7 +230,7 @@ pipeline {
227230
sh 'make px4_fmu-v4_test'
228231
sh 'make px4_fmu-v4_test bootloader_elf'
229232
sh 'ccache -s'
230-
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/upload_jlink_gdb.sh, Tools/HIL/*.py', name: 'px4_fmu-v4_test'
233+
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/*, Tools/HIL/*.py', name: 'px4_fmu-v4_test'
231234
}
232235
post {
233236
always {
@@ -273,6 +276,7 @@ pipeline {
273276
}
274277
post {
275278
always {
279+
sh './platforms/nuttx/Debug/jlink_gdb_backtrace.sh build/px4_fmu-v4_test/px4_fmu-v4_test.elf || true'
276280
resetBoard()
277281
}
278282
}
@@ -294,7 +298,7 @@ pipeline {
294298
sh 'make px4_fmu-v4pro_test'
295299
sh 'make px4_fmu-v4pro_test bootloader_elf'
296300
sh 'ccache -s'
297-
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/upload_jlink_gdb.sh, Tools/HIL/*.py', name: 'px4_fmu-v4pro_test'
301+
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/*, Tools/HIL/*.py', name: 'px4_fmu-v4pro_test'
298302
}
299303
post {
300304
always {
@@ -341,6 +345,7 @@ pipeline {
341345
}
342346
post {
343347
always {
348+
sh './platforms/nuttx/Debug/jlink_gdb_backtrace.sh build/px4_fmu-v4pro_test/px4_fmu-v4pro_test.elf || true'
344349
resetBoard()
345350
}
346351
}
@@ -362,7 +367,7 @@ pipeline {
362367
sh 'make px4_fmu-v5_debug'
363368
sh 'make px4_fmu-v5_debug bootloader_elf'
364369
sh 'ccache -s'
365-
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/upload_jlink_gdb.sh, Tools/HIL/*.py', name: 'px4_fmu-v5_debug'
370+
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/*, Tools/HIL/*.py', name: 'px4_fmu-v5_debug'
366371
}
367372
post {
368373
always {
@@ -420,6 +425,7 @@ pipeline {
420425
}
421426
post {
422427
always {
428+
sh './platforms/nuttx/Debug/jlink_gdb_backtrace.sh build/px4_fmu-v5_debug/px4_fmu-v5_debug.elf || true'
423429
resetBoard()
424430
}
425431
}
@@ -441,7 +447,7 @@ pipeline {
441447
sh 'make px4_fmu-v5_stackcheck'
442448
sh 'make px4_fmu-v5_stackcheck bootloader_elf'
443449
sh 'ccache -s'
444-
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/upload_jlink_gdb.sh, Tools/HIL/*.py', name: 'px4_fmu-v5_stackcheck'
450+
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/*, Tools/HIL/*.py', name: 'px4_fmu-v5_stackcheck'
445451
}
446452
post {
447453
always {
@@ -498,6 +504,7 @@ pipeline {
498504
}
499505
post {
500506
always {
507+
sh './platforms/nuttx/Debug/jlink_gdb_backtrace.sh build/px4_fmu-v5_stackcheck/px4_fmu-v5_stackcheck.elf || true'
501508
resetBoard()
502509
}
503510
}
@@ -519,7 +526,7 @@ pipeline {
519526
sh 'make px4_fmu-v5_test'
520527
sh 'make px4_fmu-v5_test bootloader_elf'
521528
sh 'ccache -s'
522-
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/upload_jlink_gdb.sh, Tools/HIL/*.py', name: 'px4_fmu-v5_test'
529+
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/*, Tools/HIL/*.py', name: 'px4_fmu-v5_test'
523530
}
524531
post {
525532
always {
@@ -566,80 +573,14 @@ pipeline {
566573
}
567574
post {
568575
always {
576+
sh './platforms/nuttx/Debug/jlink_gdb_backtrace.sh build/px4_fmu-v5_test/px4_fmu-v5_test.elf || true'
569577
resetBoard()
570578
}
571579
}
572580
} // stage test
573581
}
574582
}
575583

576-
// stage("modalai_fc-v1_test") {
577-
// stages {
578-
// stage("build modalai_fc-v1_test") {
579-
// agent {
580-
// docker {
581-
// image 'px4io/px4-dev-nuttx-focal:2021-09-08'
582-
// args '--cpu-shares 512 -e CCACHE_BASEDIR=$WORKSPACE -v ${CCACHE_DIR}:${CCACHE_DIR}:rw'
583-
// }
584-
// }
585-
// steps {
586-
// checkout scm
587-
// sh 'export'
588-
// sh 'make distclean'
589-
// sh 'ccache -s'
590-
// sh 'git fetch --tags'
591-
// sh 'make modalai_fc-v1_test'
592-
// sh 'make modalai_fc-v1_test bootloader_elf'
593-
// sh 'ccache -s'
594-
// stash includes: 'build/*/*.elf, platforms/nuttx/Debug/upload_jlink_gdb.sh, Tools/HIL/*.py', name: 'modalai_fc-v1_test'
595-
// }
596-
// post {
597-
// always {
598-
// sh 'make distclean'
599-
// }
600-
// }
601-
// } // stage build
602-
// stage("hardware") {
603-
// agent {
604-
// label 'modalai_fc-v1'
605-
// }
606-
// stages {
607-
// stage("flash") {
608-
// steps {
609-
// sh 'export'
610-
// sh 'find /dev/serial'
611-
// unstash 'modalai_fc-v1_test'
612-
// sh './platforms/nuttx/Debug/upload_jlink_gdb.sh build/modalai_fc-v1_test/modalai_fc-v1_bootloader.elf'
613-
// // flash board and watch bootup
614-
// sh './platforms/nuttx/Debug/upload_jlink_gdb.sh build/modalai_fc-v1_test/modalai_fc-v1_test.elf && ./Tools/HIL/monitor_firmware_upload.py --device `find /dev/serial -name *usb-*` --baudrate 57600'
615-
// }
616-
// }
617-
// stage("tests") {
618-
// steps {
619-
// runTests()
620-
// }
621-
// }
622-
// stage("status") {
623-
// steps {
624-
// // configure
625-
// resetParameters()
626-
// sh './Tools/HIL/nsh_param_set.py --device `find /dev/serial -name *usb-*` --name "SYS_AUTOSTART" --value "4001"' // generic quadcopter
627-
// sh './Tools/HIL/nsh_param_set.py --device `find /dev/serial -name *usb-*` --name "SYS_BL_UPDATE" --value "1"' // update bootloader
628-
// checkStatus()
629-
// quickCalibrate()
630-
// }
631-
// }
632-
// stage("print topics") {
633-
// steps {
634-
// printTopics()
635-
// }
636-
// }
637-
638-
// }
639-
// } // stage test
640-
// }
641-
// }
642-
643584
stage("nxp_fmuk66-v3_test") {
644585
stages {
645586
stage("build nxp_fmuk66-v3_test") {
@@ -654,7 +595,7 @@ pipeline {
654595
sh 'make nxp_fmuk66-v3_test'
655596
//sh 'make nxp_fmuk66-v3_test bootloader_elf'
656597
sh 'ccache -s'
657-
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/upload_jlink_gdb.sh, Tools/HIL/*.py', name: 'nxp_fmuk66-v3_test'
598+
stash includes: 'build/*/*.elf, platforms/nuttx/Debug/*, Tools/HIL/*.py', name: 'nxp_fmuk66-v3_test'
658599
}
659600
post {
660601
always {
@@ -701,6 +642,7 @@ pipeline {
701642
}
702643
post {
703644
always {
645+
sh './platforms/nuttx/Debug/jlink_gdb_backtrace.sh build/nxp_fmuk66-v3_test/nxp_fmuk66-v3_test.elf || true'
704646
resetBoard()
705647
}
706648
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#! /bin/sh
2+
3+
if command -v gdb-multiarch &> /dev/null
4+
then
5+
GDB_CMD=$(command -v gdb-multiarch)
6+
7+
elif command -v arm-none-eabi-gdb &> /dev/null
8+
then
9+
GDB_CMD=$(command -v arm-none-eabi-gdb)
10+
11+
else
12+
echo "gdb arm-none-eabi or multi-arch not found"
13+
exit 1
14+
fi
15+
16+
file ${1}
17+
18+
gdb_cmd_file=$(mktemp)
19+
20+
cat >"${gdb_cmd_file}" <<EOL
21+
22+
source ${WORKSPACE}/platforms/nuttx/Debug/NuttX
23+
source ${WORKSPACE}/platforms/nuttx/Debug/ARMv7M
24+
25+
target remote localhost:2331
26+
27+
monitor regs
28+
29+
showtasks
30+
31+
vecstate
32+
33+
info threads
34+
35+
backtrace
36+
37+
bt full
38+
39+
EOL
40+
41+
${GDB_CMD} -silent --nh --nx --nw -batch -x ${gdb_cmd_file} ${1}

platforms/nuttx/cmake/jlink.cmake

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,18 @@ if(JLinkGDBServerCLExe_PATH)
4848
USES_TERMINAL
4949
)
5050

51+
# jlink_gdb_backtrace (attach, print current tasks, back trace, exit)
52+
add_custom_target(jlink_gdb_backtrace
53+
COMMAND ${PX4_BINARY_DIR}/jlink_gdb_start.sh
54+
COMMAND ${CMAKE_COMMAND} -E env WORKSPACE=${PX4_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/Debug/jlink_gdb_backtrace.sh $<TARGET_FILE:px4>
55+
DEPENDS
56+
px4
57+
${PX4_BINARY_DIR}/jlink_gdb_start.sh
58+
${CMAKE_CURRENT_SOURCE_DIR}/Debug/jlink_gdb_backtrace.sh
59+
WORKING_DIRECTORY ${PX4_BINARY_DIR}
60+
USES_TERMINAL
61+
)
62+
5163

5264
# jlink_upload_bootloader
5365
# board directory supplied bootloader.bin

0 commit comments

Comments
 (0)