• VS Code 调试 start.S 汇编代码


    特别注意:debug时候,CFLAGS  AFLAGS  一定要加入 -g 参数。

    CFLAGS += -O0 -gdwarf-2
    AFLAGS += -gdwarf-2

     VS Code中加入汇编断点:

    在右侧 Run and Debug窗口的BREAKPOINTS,加入汇编的lable,如_boot、_start

    https://gitee.com/rtthread/rt-thread 

    rt-thread/.vscode/launch.json

    {
        // Use IntelliSense to learn about possible attributes.
        // Hover to view descriptions of existing attributes.
        // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "name": "(gdb) Launch",
                "type": "cppdbg",
                "request": "launch",
                "program": "${workspaceFolder}/bsp/raspberry-pi/raspi3-64/rtthread.elf",
                "args": [],
                "stopAtEntry": true,
                "cwd": "${workspaceFolder}/bsp/raspberry-pi/raspi3-64",
                "environment": [],
                "externalConsole": false,
                "MIMode": "gdb",
                "targetArchitecture": "arm",
                "miDebuggerPath":"/usr/bin/gdb-multiarch",  // "/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/aarch64-none-elf-gdb"
                "miDebuggerServerAddress": "localhost:1234",
                "setupCommands": [
                    {
                        "description": "Enable pretty-printing for gdb",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ]
            }
        ]
    }

    当gdb启动时,会读取HOME目录和当前目录下的的配置文件,执行里面的命令。这个文件通常为“.gdbinit”。

    所以 .gdbinit需要在 "cwd": "${workspaceFolder}/bsp/raspberry-pi/raspi3-64",目录下

    rt-thread/bsp/raspberry-pi/raspi3-64/.gdbinit

    # set architecture aarch64
    # target remote localhost:1234
    # file rtthread.elf
    # layout asm
    b main
    b *0x80000
    b *0x80088

    How to debug with gdb

    Append -s and -S options to the qemu command.

    • -s: enable to attach gdb to QEMU at port 1234
    • -S: start and halted CPU (wait for attach from gdb)

    VS Code 打开任何C/C++文件,右键选择  Open Disassembly View

    https://docs.lagerdata.com/tutorials/vscode.html

    https://github.com/Microsoft/vscode-cpptools/issues/1498

    https://github.com/microsoft/vscode-cpptools/issues/6010

    {
        // Use IntelliSense to learn about possible attributes.
        // Hover to view descriptions of existing attributes.
        // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "name": "(arm-none-eabi-gdb) Launch",
                "type": "cppdbg",
                "request": "launch",
                "miDebuggerPath":"/usr/bin/gdb-multiarch",
                "targetArchitecture": "arm",
                "program": "${workspaceFolder}/kernel.elf",
                "setupCommands": [
                    {"text": "set remotetimeout 5"},
                    {"text": "target remote localhost:1234"},
                    {"text": "monitor reset halt"},
                    {"text": "file kernel.elf"},
                    {"text": "load"},
                    {"text": "break main thread 1","ignoreFailures": true},
                ],
                "launchCompleteCommand": "None",
                "externalConsole": false,
                "cwd": "${workspaceFolder}",
            }
        ]
    }

    不确定是否是QEMU的bug ?

    使用 img 二进制文件时,QEMU调试boot启动代码, mrs x0, CurrentEL,x0=8:  EL2

    qemu-system-aarch64 -M raspi3 -m 1024 -serial null -serial mon:stdio -nographic -kernel kernel.img -S -s

    使用 elf 文件时,QEMU调试boot启动代码, mrs x0, CurrentEL,x0=12:  EL3

    qemu-system-aarch64 -M raspi3 -m 1024 -serial null -serial mon:stdio -nographic -kernel kernel.elf -S -s

    其他:

    .gdbinit用法示例

    aarch64-none-elf-gdb -x .gdbinit -tui

    gdb 多核/多线程

    b main thread 1
    b *0x80000 thread 1
     
  • 相关阅读:
    实现停车记录
    Python第四章__装饰器、迭代器
    请问使用jmeter在tcp取样器测试中服务器名称或ip,端口可以填变量值吗?
    [drp 7]转发和重定向的区别
    [drp 6]接口和抽象类的区别,及其应用场景
    MongoDB 3: 使用中的问题,及其应用场景
    MongoDB 2: 安装和使用
    MongoDB 1: NoSQL 和 SQL的区别
    Redis 2:简单使用
    Redis 1:简介
  • 原文地址:https://www.cnblogs.com/sinferwu/p/15337290.html
Copyright © 2020-2023  润新知