Отладка FreeRTOS в Linux с использованием gdb, проблема SIGTRAP - PullRequest
0 голосов
/ 13 июня 2019

Я занимаюсь разработкой приложения для Linux и встроенного устройства с использованием FreeRTOS.

Приложение работает нормально, но отладка сильно затруднена, поскольку возобновление невозможно после достижения точки останова.

Вот расшифровка стенограммы из gdb:

(gdb) break /mnt/d/alfie/gb/monorepo/freertos/queue.c:1244
Breakpoint 2 at 0x408ebc: file /mnt/d/alfie/gb/monorepo/freertos/queue.c, line 1244.
(gdb) start
Temporary breakpoint 3 at 0x4021fd: file /mnt/d/alfie/gb/monorepo/linux/app/main.c, line 55.
Starting program: /mnt/d/alfie/gb/monorepo/linux/app/AppLinux
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Temporary breakpoint 3, main () at /mnt/d/alfie/gb/monorepo/linux/app/main.c:55
55          LL_INFO(1, "Starting FreeRTOS!");
(gdb) c
Continuing.
[INFO] Starting FreeRTOS! (/mnt/d/alfie/gb/monorepo/linux/app/main.c:55)
Running as PID: 20862
[New Thread 0x7ffffeaf0700 (LWP 20863)]
[New Thread 0x7ffffe2e0700 (LWP 20864)]
[New Thread 0x7ffffdad0700 (LWP 20865)]
[New Thread 0x7ffffd2c0700 (LWP 20866)]
[INFO] Scheduler starting (/mnt/d/alfie/gb/monorepo/linux/app/main.c:74)
[New Thread 0x7ffffcab0700 (LWP 20867)]
Timer Resolution for Run TimeStats is 100 ticks per second.
[New Thread 0x7ffff7ff0700 (LWP 20868)]
[Switching to Thread 0x7ffffdad0700 (LWP 20865)]

Thread 4 "AppLinux" hit Breakpoint 2, xQueueGenericReceive (xQueue=0x69c420, pvBuffer=0x0, xTicksToWait=0, xJustPeeking=0)
    at /mnt/d/alfie/gb/monorepo/freertos/queue.c:1244
1244            configASSERT( pxQueue );
(gdb) c
Continuing.

Thread 4 "AppLinux" received signal SIGTRAP, Trace/breakpoint trap.
<signal handler called>
(gdb)

На данный момент программа не хочет продолжать. Он будет просто печатать следующее снова и снова при попытке продолжить:

Thread 4 "AppLinux" received signal SIGTRAP, Trace/breakpoint trap.

Я не уверен, что это проблема с потоками (pthreads) или что-то, что FreeRTOS делает с прерываниями / SIGTRAP, чтобы это произошло.

Любая помощь высоко ценится.

...