Forum: Mikrocontroller und Digitale Elektronik Einstieg GDB


von Matthias (Gast)


Lesenswert?

Hallo,

ich versuche mit ST-Link V2 und GDB unter CodeBlocks zu debuggen.
Es gibt keine Fehler - aber es passiert auch nichts.
Hier die Anzeige in CodeBlocks:
1
Active debugger config: GDB/CDB debugger:Default
2
Building to ensure sources are up-to-date
3
Selecting target: 
4
debug
5
...
6
Starting debugger: C:\ST\STM32CubeIDE_1.7.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346\tools\bin\arm-none-eabi-gdb.exe -fullname -quiet  -args D:/Projekte/Y/M01Cplus/2nd_lvl_flashloader/temp/y_m01cplus_2nd_lvl_fbl_dbg.elf
7
done
8
Setting breakpoints
9
Debugger name and version: GNU gdb (GNU Tools for STM32 9-2020-q2-update.20201001-1621) 8.3.1.20191211-git

Vielleicht ist mein Denkfehler aber auch, dass der GDB ein ganz normaler 
Debugger ist wie Lauterbach oder AVR-Studio

Gruß Matthias

(Edit: pre-Tags eingefügt - Mod.)

: Bearbeitet durch Moderator
von Johannes S. (Gast)


Lesenswert?

da fehlt der ST-LINK_gdbserver, VSCode /CortexDebug ruft das z.B. so 
auf:
1
Launching server: "c:\ST\STM32CubeIDE_1.4.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.stlink-gdb-server.win32_1.6.0.202101291314\tools\bin\ST-LINK_gdbserver.exe" "-p" "50000" "-cp" "c:\ST\STM32CubeIDE_1.4.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.cubeprogrammer.win32_2.0.0.202105311346\tools\bin" "--swd" 
2
Launching GDB: "c:\ST\STM32CubeIDE_1.4.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346\tools\bin\arm-none-eabi-gdb.exe" "-q" "--interpreter=mi2"

siehe auch die Doku zum STLink gdbserver.

von Olaf (Gast)


Lesenswert?

> Vielleicht ist mein Denkfehler aber auch, dass der GDB ein ganz normaler
> Debugger ist wie Lauterbach oder AVR-Studio

Handbuch lesen?

https://sourceware.org/gdb/current/onlinedocs/gdb/

Olaf

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

at Johannes: Den Server habe ich vorher über eine Batch gestartet.

von c-hater (Gast)


Lesenswert?

Matthias schrieb:

> at Johannes: Den Server habe ich vorher über eine Batch gestartet.

Zur Inetriebnahem startet man sowas erstmal über eine Console. So hat 
man nämlich die Chance, eventuell hilfreiche Fehlermeldungen auch 
mitzubekommen.

von Matthias (Gast)


Lesenswert?

at c-hater: Die Meldungen des ST-Link Servers findest Du im angefügten 
rtf-Dokument.

von Lutz (Gast)


Lesenswert?

Dein ernst?

von c-hater (Gast)


Lesenswert?

Matthias schrieb:

> at c-hater: Die Meldungen des ST-Link Servers findest Du im angefügten
> rtf-Dokument.

Ich bin doch nicht bescheuert und öffne ein *.rtf aus unbekannter 
Quelle.

Mach' das draus, was auch alle anderen Leute für Logs verwenden. Eine 
Textdatei.

von Johannes S. (Gast)


Lesenswert?

na ja, viele machen auch gerne ein unleserliches Foto vom Bildschirm.

Im UM2576 und im UM2237 ist das (fast) alles beschreiben. Ausser 
vielleicht das diese Kombi den Hardware Reset haben, was ich hier ja 
auch vor kurzem gefragt hatte.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

c-hater schrieb:
> Ich bin doch nicht bescheuert und öffne ein *.rtf aus unbekannter
> Quelle.

Im Gegensatz zu einem .docx dürfte ein RTF vergleichsweise sicher sein, 
da es keine Makros transportieren kann.

In diesem konkreten Fall enthält es eh nur ein einzelnes Bild, 
vermutlich also ein Screenshot. Aber das ist natürlich an sich schon mal 
sinnlos: dann hätte man das Bild auch gleich direkt posten können. Viel 
sinnvoller wäre stattdessen jedoch ein Text-Mitschnitt per copy & paste. 
Auch dafür wiederum startet man sowas erstmal außerhalb der IDE in einem 
normalen Terminal, in dem copy & paste einfach zu bewerkstelligen ist.

(Außerdem crasht LibreOffice beim Versuch, das Ding zu öffnen, ich sehe 
also keinen Inhalt.)

Beitrag #6862264 wurde von einem Moderator gelöscht.
von Lutz (Gast)


Lesenswert?

Unter Linux recht ungefährlich. Als Tetxdatei geöffnet steht da nur 
Schund drin; also kein Text. Bild wird es wohl treffen.

von wertig (Gast)


Lesenswert?

> steht da nur Schund drin
Das hab ich doch gewusst!

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Ich kann die RTF Datei ohne Probleme öffnen. Mit LibreOffice 7.0.4.2 
unter Debian Linux mit Gnome 3. Ich habe das Bild mal angehängt. 
paradoxerweise ist es jetzt nur noch 1/40 so groß.

Warum halten sich immer mehr Leute für Softwareentwickler, die nicht 
einmal ihren eigenen Computer bedienen können?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich kann die RTF Datei ohne Probleme öffnen.

Ändert nichts dran, dass man das hätte besser als Text copy & pasten 
sollen.

Außerdem sagt es auch bloß, dass der Debugger sich nicht verbindet.

Also: GDB extern (in zweitem Kommandofenster) starten, und dann ein
1
targ rem :61235

ausführen. Kein .gdbinit oder dergleichen abarbeiten.

Keine Ahnung, was für'n GDBserver das ist … ich würde hier eher zu 
OpenOCD tendieren.

von c-hater (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich kann die RTF Datei ohne Probleme öffnen.

Schön. Nun kann man sogar lesen, dass da sogar ein Textfile fix und 
fertig zum Upload erzeugt wurde...

Was den sonstigen Inhalt des Screenshots betrifft: Dat Dingens läuft. 
Man braucht sich bloß noch verbinden.

von Stefan F. (Gast)


Lesenswert?

Jörg W. schrieb:
> Keine Ahnung, was für'n GDBserver das ist

Steht in der Titelzeile des Fensters (im Screenshot).

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan ⛄ F. schrieb:
> Jörg W. schrieb:
>> Keine Ahnung, was für'n GDBserver das ist
>
> Steht in der Titelzeile des Fensters (im Screenshot).

OK.

Ist der irgendwie besser als OpenOCD? Oder warum haben die das Fahrrad 
nochmal erfunden?

von c-hater (Gast)


Lesenswert?

Jörg W. schrieb:

> Ist der irgendwie besser als OpenOCD? Oder warum haben die das Fahrrad
> nochmal erfunden?

Es wird schon irgendwas was da sein, was besser ist. OpenOCD ist ja nun 
nicht gerade das Gelbe vom Ei. Die typische Eierlegende Wollmilchsau, 
kann alles, aber nix wirklich gut oder gar schnell.

von Stefan F. (Gast)


Lesenswert?

Jörg W. schrieb:
> Ist der irgendwie besser als OpenOCD? Oder warum haben die das Fahrrad
> nochmal erfunden?

Mit dem ST-Link GDB kann die STM32 Cube IDE Trace SWO Meldungen 
innerhalb der IDE anzeigen.

Mit OpenOCD muss man sie hingegen in eine Datei schreiben die man sich 
dann außerhalb der IDE anschaut. Zudem hat die IDE für diese Variante 
keinen Button zum anklicken, dass muss man manuell konfigurieren.

Sonst sind mir keine Unterschiede aufgefallen.

von Matthias (Gast)


Lesenswert?

"Was den sonstigen Inhalt des Screenshots betrifft: Dat Dingens läuft.
 Man braucht sich bloß noch verbinden."

Was muss ich tun, um mich zu verbinden.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Matthias schrieb:
> Was muss ich tun, um mich zu verbinden.

Habe ich oben geschrieben: "target remote :61235" am GDB-Prompt 
eingeben.

Erstmal das, und manuell gucken, ob der GDB mit allem zurecht kommt.

Erst, wenn das geht, sich um die IDE-Integration Gedanken machen (die 
dann wohl auf ein .gdbinit-Script hinaus läuft).

Stefan ⛄ F. schrieb:
> Mit dem ST-Link GDB kann die STM32 Cube IDE Trace SWO Meldungen
> innerhalb der IDE anzeigen.

OK, dafür ist vermutlich dann der zweite TCP-Port da, der da angegeben 
ist.

Habe ich noch nie benutzt, wir haben entweder eine UART (oft auch mit 1 
MBaud) benutzt (die dann auch abseits des Debuggers nutzbar ist), oder 
wenn es schnell gehen muss, dann mit GPIOs hantiert, die man auf einem 
LA darstellt.

von Matthias (Gast)


Lesenswert?

So, jetzt sitze ich wieder am Target:
1
Active debugger config: GDB/CDB debugger:Default
2
Building to ensure sources are up-to-date
3
Selecting target: 
4
debug
5
Adding source dir: D:\Projekte\FE\ZEHR2\zehr2_test\pjt\
6
Adding source dir: D:\Projekte\FE\ZEHR2\zehr2_test\
7
Adding file: D:\Projekte\FE\ZEHR2\zehr2_test\result\FE_ZEHR2_Testapp_Serie.elf
8
Changing directory to: D:/Projekte/FE/ZEHR2/zehr2_test/pjt/.
9
Set variable: PATH=.;D:\Projekte\FE\ZEHR2\zehr2_test\src\linker;D:\Projekte\FE\ZEHR2\zehr2_test\libs\bios\src\linker;C:\Program Files\STW\ARM GCC\none-eabi\4_5_2\bin;C:\Program Files\STW\ARM GCC\none-eabi\4_5_2;c:\ST\STM32CubeIDE_1.7.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346\tools\bin;c:\ST\STM32CubeIDE_1.7.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346\tools;C:\STW\WinAVR-20100110\bin;C:\STW\WinAVR-20100110;C:\Program Files\Atmel\AVR Tools\utils\bin;C:\WinAVR\utils\bin;C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\utils\bin;C:\WinAVR-20100110\utils\bin;C:\STW\WinAVR-20100110\utils\bin;C:\HIGHTEC\toolchains\tricore\v4.9.2.0\bin;C:\HIGHTEC\licensemanager;C:\Perl64\site\bin;C:\Perl64\bin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Embarcadero\RAD Studio\8.0\bin;C:\Users\Public\Documents\RAD Studio\8.0\BPL;C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Windows\SysWOW64;C:\Windows\SysWOW64\wbem;C:\Windows\SysWOW64\WindowsPowerShell\v1.0;C:\Program Files (x86)\AdminStudio\10.0\Common;C:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn;C:\Windows\System32\OracleClient;C:\Windows\System32\OpenSSH;C:\Program Files\TortoiseSVN\bin;C:\Users\koelling\AppData\Local\Microsoft\WindowsApps;C:\Qt\Qt5.15.2\Tools\mingw810_32\bin;C:\Qt\Qt5.15.2\5.15.2\mingw81_32\bin
10
Starting debugger: C:\ST\STM32CubeIDE_1.7.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_2.0.0.202105311346\tools\bin\arm-none-eabi-gdb.exe -fullname -quiet  -args D:/Projekte/FE/ZEHR2/zehr2_test/result/FE_ZEHR2_Testapp_Serie.elf
11
done
12
Setting breakpoints
13
Debugger name and version: GNU gdb (GNU Tools for STM32 9-2020-q2-update.20201001-1621) 8.3.1.20191211-git
14
> target remote :61234
15
:61234: Das System hat versucht, einem Verzeichnis, das sich auf einem mit JOIN zugeordneten Laufwerk befindet, ein Laufwerk mit SUBST zuzuordnen.
16
> target remote :61235
17
:61235: Das System hat versucht, einem Verzeichnis, das sich auf einem mit JOIN zugeordneten Laufwerk befindet, ein Laufwerk mit SUBST zuzuordnen.

: Bearbeitet durch Moderator
von Matthias (Gast)


Lesenswert?

Mit dem Port 61234 bekomme ich eine Verbindung, aber irgendwo klemmts 
noch.
Continuing...
In  ()
Cannot find bounds of current function
Cannot find bounds of current function
Continuing...
Trying to interrupt process with pid: 28028; child pid: 0 gdb pid: 30212
Continuing...
Trying to interrupt process with pid: 28028; child pid: 0 gdb pid: 30212
Trying to interrupt process with pid: 28028; child pid: 0 gdb pid: 30212
Continuing...
Trying to interrupt process with pid: 28028; child pid: 0 gdb pid: 30212
Continuing...
Trying to interrupt process with pid: 28028; child pid: 0 gdb pid: 30212
Trying to interrupt process with pid: 28028; child pid: 0 gdb pid: 30212
Trying to interrupt process with pid: 28028; child pid: 0 gdb pid: 30212
Trying to interrupt process with pid: 28028; child pid: 0 gdb pid: 30212

von Stefan F. (Gast)


Lesenswert?

Matthias schrieb:
> Das System hat versucht, einem Verzeichnis, das sich auf einem
> mit JOIN zugeordneten Laufwerk befindet, ein Laufwerk mit SUBST
> zuzuordnen.

Versuche mal, auf Netzlaufwerke zu verzichten. Mache alles nur in 
lokalen Verzeichnissen auf deiner eigenen Festplatte bzw SSD.

von Johannes S. (Gast)


Lesenswert?

das ist eine falsche Fehlermeldung, kommt afaik wenn eben keine 
Verbindung zum Target besteht.
Der gdb versucht einen lokalen Prozess zu verbinden.

von Dieter Graef (Gast)


Lesenswert?

Matthias schrieb:
> ich versuche mit ST-Link V2 und GDB unter CodeBlocks zu debuggen.
Beim Raspi mit Codeblocks hab ich das so gemacht:
eine Debugger Konfiguration mit:
executable: /usr/bin/arm-none-eabi-gdb
initialization: target extended-remote localhost:3333
                monitor reset halt

mit stlink oder über die Massenspeicherschnittstelle der 
Nucleo/Discovery boards lade ich das zu debuggende Programm.

in einem extra Fenster starte ich openocd mit der Boardkonfiguration
z.b.          : openocd -f board/stm32f469discovery.cfg

und debugge fröhlich vor mich hin

mfG Dieter

von Matthias (Gast)


Lesenswert?

Hallo Stefan,

mit dem Port 61234 scheint sich einiges zu tun.
Bezüglich Codeblocksintegration bin ich nach diesem Artikel[STM32F4 mit 
Code::Blocks] vorgegangen. Mit den Debug-Kommandos aus Codeblocks 
passiert auch irgendetwas, siehe letzter Post. In dem Artikel hieß es, 
dass mit dem Start des Debuggers das elf-file geflasht wird. Aber das 
passiert nicht. Scheinbar gab es seit diesem Artikel eine Evolution in 
den verwendeten Tools.

von Johannes S. (Gast)


Lesenswert?

wie wird denn der gdb-server gestartet? Ich doch schon das Beispiel von 
VSC genannt, es muss der STLink-gdbserver mit -cp cubeprogrammer --swd 
gestartet werden.

von Matthias (Gast)


Lesenswert?

Hallo Johannes,

cmd /K "ST-LINK_gdbserver.exe -e -d -f debug.log -l 31 -v -t -cp 
c:/ST/STM32CubeIDE_1.7.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.e 
xternaltools.cubeprogrammer.win32_2.0.0.202105311346/tools/bin  || echo 
GDB server exited"

von Johannes S. (Gast)


Lesenswert?

habe das gerade auch mal gestartet, in einem Fenster den gdbserver mit
1
ST-LINK_gdbserver.exe" "-p" "50000" "-cp" "externaltools.cubeprogrammer.win32_2.0.0.202105311346\tools\bin" "--swd" 
2
3
STMicroelectronics ST-LINK GDB server. Version 5.8.0
4
Copyright (c) 2020, STMicroelectronics. All rights reserved.
5
6
Starting server with the following options:
7
        Persistent Mode            : Disabled
8
        Logging Level              : 31
9
        Listen Port Number         : 50000
10
        Status Refresh Delay       : 15s
11
        Verbose Mode               : Disabled
12
        SWD Debug                  : Enabled
13
14
Target connection mode: Default
15
Reading ROM table for AP 0 @0xe00fffd0
16
Hardware watchpoint supported by the target
17
COM frequency = 24000 kHz
18
ST-LINK Firmware version : V3J7M2
19
Device ID: 0x413
20
PC: 0x80045a0
21
ST-LINK device status: HALT_MODE
22
ST-LINK detects target voltage = 3.22 V
23
ST-LINK device status: HALT_MODE
24
ST-LINK device initialization OK
25
Waiting for debugger connection...
26
Waiting for connection on port 50000...
27
28
--- nach dem Verbinden von arm-none-eabe-gdb:
29
Accepted connection on port 50000...
30
Debugger connected
31
Enter STM32_AppReset() function
32
NVIC_DFSR_REG = 0x00000008
33
NVIC_CFGFSR_REG = 0x00000000

und in einem anderen den arm-none-abi-gdb mit
1
arm-none-eabi-gdb 
2
GNU gdb (GNU Tools for STM32 9-2020-q2-update.20201001-1621) 8.3.1.20191211-git
3
Copyright (C) 2019 Free Software Foundation, Inc.
4
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
5
This is free software: you are free to change and redistribute it.
6
There is NO WARRANTY, to the extent permitted by law.
7
Type "show copying" and "show warranty" for details.
8
This GDB was configured as "--host=x86_64-w64-mingw32 --target=arm-none-eabi".
9
Type "show configuration" for configuration details.
10
For bug reporting instructions, please see:
11
<http://www.gnu.org/software/gdb/bugs/>.
12
Find the GDB manual and other documentation resources online at:
13
    <http://www.gnu.org/software/gdb/documentation/>.
14
15
For help, type "help".
16
Type "apropos word" to search for commands related to "word".
17
(gdb) tar rem localhost:50000
18
Remote debugging using localhost:50000
19
warning: No executable has been specified and target does not support
20
determining executable automatically.  Try using the "file" command.
21
0x080045a0 in ?? ()
22
(gdb) mon reset
23
STM32 Successfully completed reset operation
24
(gdb)

der gdb wird so gestartet für Kommandozeilenbedienung. Wenn eine IDE den 
bedient, dann wird üblicherweise ein anderes Protokoll verwendet
und ein
1
"-q" "--interpreter=mi2"
angehängt.

Wenn der STLink Prozess sich beendet, dann bekomme ich auch die falsche 
Fehlermeldung
1
(gdb) tar ext localhost:50000
2
localhost:50000: Das System hat versucht, einem Verzeichnis, das sich auf einem mit JOIN zugeordneten Laufwerk befindet, ein Laufwerk mit SUBST zuzuordnen.

edit:
habe die langen Pfade mal rausgenommen damit es etwas leserlicher wird.

Müsste bei dir entsprechend nach dem Start von arm-none-eabi-gdb mit
1
tar rem localhost:61234
verbinden.

noch ein Nachtrag:
es gibt 'target remote ip:port' und 'target extended remote //./COMx', 
letzteres z.B. über einen seriellen port oder USB. Wenn der gdbserver 
das nicht erwartet, dann kann der sich wie in meinem Beispiel 
verabschieden.

von Matthias (Gast)


Lesenswert?

Hallo Johannes,

PARSE ERROR: Argument: --interpreter=mi2
             Couldn't find match for argument

Brief USAGE:
   ST-LINK_gdbserver.exe  [--external-init] [--pend-halt-timeout 
<Pending
                          halt timeout>] [--halt] [-c <config file>] 
[-e]
                          [-f <log file>] [-l <log level>] [-p <port
                          number>] [-v] [-r <refresh delay>] [-s] [-d] 
[-z
                          <port number>] [-a <cpu clock>] [-b <SWO
                          CLOCKDIV>] [-k] [-q] [-i <ST-LINK S/N>] [-m
                          <apID>] [-g] [-t] [--erase-all] [--memory-map
                          <device id>] [--ext-memory-loaders] [-el
                          <file_path>] [-cp <path>] [--temp-path <path>]
                          [--preserve-temps] [--frequency <max freq 
kHz>]
                          [--licenses] [--] [--version] [-h]

von Johannes S. (Gast)


Lesenswert?

ist ein argument für den arm-none-eabi-gdb

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Matthias schrieb:
> PARSE ERROR: Argument: --interpreter=mi2
> Couldn't find match for argument
> Brief USAGE:
> ST-LINK_gdbserver.exe

Das Argument gehört an den GDB, nicht an den GDB-Server.

von Matthias (Gast)


Lesenswert?

Mit diesem Argument verbindet sich der debugger nicht mehr mit dem 
Server.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Matthias schrieb:
> Mit diesem Argument verbindet sich der debugger nicht mehr mit dem
> Server.

Lass dir doch bitte nicht alles aus der Nase ziehen: was genau tut er, 
was passiert, welche Fehlermeldungen gibt es?

von Matthias (Gast)


Lesenswert?

Hallo Jörg,

ohne --interpreter=mi2 kann ich händisch mit einem load das Programm 
zumindest laden.
1
> load y_m01cplus_2nd_lvl_fbl_dbg.elf
2
Loading section .block_signature, size 0x96 lma 0x8018000
3
Loading section .isr_vector, size 0x18c lma 0x8018200
4
Loading section .text, size 0x9be8 lma 0x801838c
5
Loading section .rodata, size 0xffc lma 0x8021f74
6
Loading section .init_array, size 0x4 lma 0x8022f70
7
Loading section .fini_array, size 0x4 lma 0x8022f74
8
Loading section .data, size 0x3c lma 0x8022f78
9
Start address 0x801cecc, load size 44618
10
Transfer rate: 17 KB/sec, 2124 bytes/write.
11
12
 ------ Switching to STM32CubeProgrammer -----
13
      -------------------------------------------------------------------
14
                       STM32CubeProgrammer v2.8.0
15
      -------------------------------------------------------------------
16
17
18
19
Log output file:   C:\Users\koelling\AppData\Local\Temp\STM32CubeProgrammer_a24772.log
20
ST-Link Server is running on port : 7184
21
ST-LINK SN  : 37FF6F064243393049192057
22
ST-LINK FW  : V2J38S7
23
Board       : --
24
Voltage     : 3.23V
25
SWD freq    : 4000 KHz
26
Connect mode: Under Reset
27
Reset mode  : Hardware reset
28
Device ID   : 0x435
29
Revision ID : Rev Z
30
Device name : STM32L43xxx/STM32L44xxx
31
Flash size  : 256 KBytes
32
Device type : MCU
33
Device CPU  : Cortex-M4
34
BL Version  : 0x__
35
36
37
38
Memory Programming ...
39
Opening and parsing file: ST-LINK_GDB_server_a24772.srec
40
  File          : ST-LINK_GDB_server_a24772.srec
41
  Size          : 44618 Bytes
42
  Address       : 0x08018000
43
44
45
Erasing memory corresponding to segment 0:
46
Erasing internal memory sector 48
47
Erasing memory corresponding to segment 1:
48
Erasing internal memory sectors [48 69]
49
Download in Progress:
50
██████████████████████████████████████████████████ 100%
51
52
File download complete
53
Time elapsed during download operation: 00:00:01.806
54
 ------ Switching context -----
55
COM frequency = 4000 kHz
56
Target connection mode: Default
57
Reading ROM table for AP 0 @0xe00fffd0
58
Hardware watchpoint supported by the target
59
ST-LINK Firmware version : V2J38S7
60
Device ID: 0x435
61
PC: 0x80009b4
62
ST-LINK detects target voltage = 3.23 V
63
ST-LINK device status: HALT_MODE
64
ST-LINK device initialization OK

Mit dem Argument --interpreter=mi2 für den GDB wird keine Verbindung zum 
Sever aufgebaut.
1
Starting debugger: C:\Programme\STW\ARM GCC\none-eabi\4_5_2\bin\arm-none-eabi-gdb.exe -fullname -quiet --interpreter=mi2 -args D:/Projekte/Y/M01Cplus/2nd_lvl_flashloader/temp/y_m01cplus_2nd_lvl_fbl_dbg.elf
2
done
3
Setting breakpoints
4
5
STMicroelectronics ST-LINK GDB server. Version 5.9.1
6
Copyright (c) 2021, STMicroelectronics. All rights reserved.
7
8
Starting server with the following options:
9
        Persistent Mode            : Enabled
10
        LogFile Name               : debug.log
11
        Logging Level              : 31
12
        Listen Port Number         : 61234
13
        Status Refresh Delay       : 15s
14
        Verbose Mode               : Enabled
15
        SWD Debug                  : Enabled
16
17
COM frequency = 4000 kHz
18
Target connection mode: Default
19
Reading ROM table for AP 0 @0xe00fffd0
20
Hardware watchpoint supported by the target
21
ST-LINK Firmware version : V2J38S7
22
Device ID: 0x435
23
PC: 0x80009b4
24
ST-LINK device status: HALT_MODE
25
ST-LINK detects target voltage = 3.23 V
26
ST-LINK device status: HALT_MODE
27
ST-LINK device initialization OK
28
Waiting for debugger connection...Waiting for connection on port
29
61235...
30
Waiting for connection on port 61234...

: Bearbeitet durch Moderator
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

(Bitte füge mal [ pre ] ... [ /pre ] Tags bei deinen 
Terminalmitschriften ein, die Leerzeichen dabei weglassen.)

Nun, du hast da glaub' ich immer noch einen Automatismus, und alles wird 
in einem Terminalfenster verwurschtelt.

Starte doch den Kram mal getrennt: ein Fenster den GDB-Server mit seinen 
Ausschriften, in einem anderen Fenster den GDB - ohne irgendein 
.gdbinit.

Ich habe keinen STlink hier, daher mal am Beispiel von OpenOCD:
1
$ openocd -f .openocd/samd20.cfg 
2
Open On-Chip Debugger 0.11.0+dev-00294-g3d9534b8a (2021-08-02-22:38)
3
Licensed under GNU GPL v2
4
For bug reports, read
5
        http://openocd.org/doc/doxygen/bugs.html
6
DEPRECATED! use 'adapter speed' not 'adapter_khz'
7
Warn : Interface already configured, ignoring
8
Info : auto-selecting first available session transport "swd". To override use 'transport select <transport>'.
9
Info : Listening on port 6666 for tcl connections
10
Info : Listening on port 4444 for telnet connections
11
Info : CMSIS-DAP: SWD  supported
12
Info : CMSIS-DAP: JTAG supported
13
Info : CMSIS-DAP: FW Version = 01.27.0082
14
Info : CMSIS-DAP: Serial# = J41800000136
15
Info : CMSIS-DAP: Interface Initialised (SWD)
16
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1
17
Info : CMSIS-DAP: Interface ready
18
Info : clock speed 400 kHz
19
Info : SWD DPIDR 0x0bc11477
20
Info : at91samd20j18.cpu: hardware has 4 breakpoints, 2 watchpoints
21
Info : starting gdb server for at91samd20j18.cpu on 3333
22
Info : Listening on port 3333 for gdb connections
23
Info : accepting 'gdb' connection on tcp/3333
24
Info : SAMD MCU: SAMD20J18A (256KB Flash, 32KB RAM)
25
undefined debug reason 8 - target needs reset
26
Warn : Prefer GDB command "target extended-remote :3333" instead of "target remote :3333"
27
Info : dropped 'gdb' connection
28
^C

Hier der GDB:
1
$ % arm-none-eabi-gdb --interpreter=mi2
2
=thread-group-added,id="i1"
3
~"GNU gdb (GDB) 10.2\n"
4
~"Copyright (C) 2021 Free Software Foundation, Inc.\n"
5
~"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law."
6
~"\nType \"show copying\" and \"show warranty\" for details.\n"
7
~"This GDB was configured as \"--host=x86_64-unknown-freebsd12.2 --target=arm-none-eabi\".\n"
8
~"Type \"show configuration\" for configuration details.\n"
9
~"For bug reporting instructions, please see:\n"
10
~"<https://www.gnu.org/software/gdb/bugs/>.\n"
11
~"Find the GDB manual and other documentation resources online at:\n    <http://www.gnu.org/software/gdb/documentation/>."
12
~"\n\n"
13
~"For help, type \"help\".\n"
14
~"Type \"apropos word\" to search for commands related to \"word\".\n"
15
(gdb) 
16
targ rem :3333
17
&"targ rem :3333\n"
18
~"Remote debugging using :3333\n"
19
=thread-group-started,id="i1",pid="42000"
20
&"warning: No executable has been specified and target does not support\ndetermining executable automatically.  Try using the \"file\" command."
21
&"\n"
22
=thread-created,id="1",group-id="i1"
23
~"0x000000a4 in ?? ()\n"
24
*stopped,frame={addr="0x000000a4",func="??",args=[],arch="arm"},thread-id="1",stopped-threads="all"
25
^done
26
(gdb) 
27
disp /i $pc
28
&"disp /i $pc\n"
29
~"1: x/i $pc\n"
30
~"=> 0xa4:\tb.n\t0xa4\n"
31
^done
32
(gdb) 
33
si
34
&"si\n"
35
^running
36
*running,thread-id="all"
37
(gdb) 
38
~"0x000000a4 in ?? ()\n"
39
~"1: x/i $pc\n"
40
~"=> 0xa4:\tb.n\t0xa4\n"
41
*stopped,reason="end-stepping-range",frame={addr="0x000000a4",func="??",args=[],arch="arm"},thread-id="1",stopped-threads="all"
42
(gdb) 
43
44
&"\n"
45
^done
46
(gdb) 
47
48
&"\n"
49
^done
50
(gdb) 
51
52
&"\n"
53
^done
54
(gdb) 
55
56
&"\n"
57
^done
58
(gdb) 
59
c
60
&"c\n"
61
~"Continuing.\n"
62
^running
63
*running,thread-id="all"
64
(gdb) 
65
^C~"\nProgram"
66
~" received signal SIGINT, Interrupt.\n"
67
~"0x000000a4 in ?? ()\n"
68
~"1: x/i $pc\n"
69
~"=> 0xa4:\tb.n\t0xa4\n"
70
*stopped,reason="signal-received",signal-name="SIGINT",signal-meaning="Interrupt",frame={addr="0x000000a4",func="??",args=[],arch="arm"},thread-id="1",stopped-threads="all"
71
(gdb) 
72
detach
73
&"detach\n"
74
~"Detaching from program: , Remote target\n"
75
~"Ending remote debugging.\n"
76
=thread-exited,id="1",group-id="i1"
77
=thread-group-exited,id="i1"
78
~"[Inferior 1 (Remote target) detached]\n"
79
^done
80
(gdb) 
81
quit
82
&"quit\n"

Der sieht halt mit diesem --interpreter=mi2 bissel seltsam aus, aber es 
funktionieren trotzdem noch ganz normale GDB-Eingaben.

Ohne --interpreter=mi2 sieht er "normaler" aus:
1
$ arm-none-eabi-gdb 
2
GNU gdb (GDB) 10.2
3
Copyright (C) 2021 Free Software Foundation, Inc.
4
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
5
This is free software: you are free to change and redistribute it.
6
There is NO WARRANTY, to the extent permitted by law.
7
Type "show copying" and "show warranty" for details.
8
This GDB was configured as "--host=x86_64-unknown-freebsd12.2 --target=arm-none-eabi".
9
Type "show configuration" for configuration details.
10
For bug reporting instructions, please see:
11
<https://www.gnu.org/software/gdb/bugs/>.
12
Find the GDB manual and other documentation resources online at:
13
    <http://www.gnu.org/software/gdb/documentation/>.
14
15
For help, type "help".
16
Type "apropos word" to search for commands related to "word".
17
(gdb) target remote :3333
18
Remote debugging using :3333
19
warning: No executable has been specified and target does not support
20
determining executable automatically.  Try using the "file" command.
21
0x000000a4 in ?? ()
22
(gdb) disp /i $pc
23
1: x/i $pc
24
=> 0xa4:  b.n     0xa4
25
(gdb) si
26
0x000000a4 in ?? ()
27
1: x/i $pc
28
=> 0xa4:  b.n     0xa4
29
(gdb) 
30
0x000000a4 in ?? ()
31
1: x/i $pc
32
=> 0xa4:  b.n     0xa4
33
(gdb) 
34
0x000000a4 in ?? ()
35
1: x/i $pc
36
=> 0xa4:  b.n     0xa4
37
(gdb) 
38
0x000000a4 in ?? ()
39
1: x/i $pc
40
=> 0xa4:  b.n     0xa4
41
(gdb) 
42
0x000000a4 in ?? ()
43
1: x/i $pc
44
=> 0xa4:  b.n     0xa4
45
(gdb) 
46
0x000000a4 in ?? ()
47
1: x/i $pc
48
=> 0xa4:  b.n     0xa4
49
(gdb) mon reset halt
50
SWD DPIDR 0x0bc11477
51
target halted due to debug-request, current mode: Thread 
52
xPSR: 0x21000000 pc: 0x00000a5e msp: 0x20002038
53
(gdb) si
54
0x00000a60 in ?? ()
55
1: x/i $pc
56
=> 0xa60: cmp     r3, #0
57
(gdb) 
58
0x00000a62 in ?? ()
59
1: x/i $pc
60
=> 0xa62: bne.n   0xa5e
61
(gdb) 
62
0x00000a5e in ?? ()
63
1: x/i $pc
64
=> 0xa5e: subs    r3, #1
65
(gdb) 
66
0x00000a60 in ?? ()
67
1: x/i $pc
68
=> 0xa60: cmp     r3, #0
69
(gdb) c
70
Continuing.
71
^C
72
Program received signal SIGINT, Interrupt.
73
0x000000a4 in ?? ()
74
1: x/i $pc
75
=> 0xa4:  b.n     0xa4
76
(gdb) det
77
Detaching from program: , Remote target
78
Ending remote debugging.
79
[Inferior 1 (Remote target) detached]
80
(gdb) quit

Funktionieren muss aber beides, und das mi2-Interface ist halt dafür 
konzipiert, dass man damit den GDB besser woanders einbetten kann.

von Matthias (Gast)


Lesenswert?

Nachdem das alles nicht fruchtbar war, bin ich jetzt leider Gottes doch 
wieder auf die STM32 Cube IDE umgestiegen.
Jetzt stellt sich mir die Frage, wie ich in eine Library hineindebuggen 
kann.
Ich hab zwar die Sourcen, bekomme aber der IDE nicht beigebracht, wo sie 
suchen soll. Selbst wenn die Sourcen im Projekt liegen und nur vom Build 
ausgeschlossen sind (ich ziehe ja die Library an) werden sie beim 
debuggen nicht gefunden und bekomme nur die Assembleransicht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.