本文主要是介绍VS Code GD调试嵌入式Linux程序无法断点调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 问题
- vscode的launch.json
- 添加 -g
- 修改优化等级 -O0
问题
使用gdb调试嵌入式Linux上的程序时,简单的c代码小程序,通过以下的方法可以正常的调试和运行
Linux嵌入式 gdb VSCode图形化调试教程
但是最近编写的程序比较复杂,代码量也比较多
在程序中打断点会发现没有反应,并且启动gdb之后断点符号是灰色的
板子上的程序也是直接运行,没有按照断点位置停下来
vscode的launch.json
首先是查看vscode这边的launch.json有没有配置正确
{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "SK_Control(gdb)启动","type": "cppdbg","request": "launch","program": "${workspaceFolder}/SK_Control", // 用于选择被调试的可执行程序路径"args": [],"stopAtEntry": true, // 若为true则启动调试后自动停在main开头"cwd": "${workspaceFolder}", // 工作目录"debugStdLib":true,"miDebuggerPath":"/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gdb", // 修改过"miDebuggerServerAddress": "192.168.0.232:6000","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true,}],}]
}
核心就是
"miDebuggerPath":"/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gdb", // 修改过"miDebuggerServerAddress": "192.168.0.232:6000",
可以先用一个小的历程来测试一下gdb服务有没有打通
添加 -g
基本的调试命令
用gcc命令来举例
步骤 | 命令 |
---|---|
预处理 | gcc -E hello.c -o hello.i |
编译 | gcc -S hello.i -o hello.s |
汇编 | gcc -c hello.s -o hello.o |
链接 | gcc hello.o -o hello_elf |
gcc命令详细:
选项 | 含义 |
---|---|
“-E” | 只进行预处理 |
“-S”(大写) | 只进行预处理和编译 |
“-c”(小写) | 只进行预处理、编译和汇编 |
“-o file” | 指定生成的输出文件名为file |
这个时候需要的debug中常用的指令
-g
在交叉编译时加入-g
修改优化等级 -O0
断点添加不上,还有一个可能就是交叉编译器默认优化等级是 -O2
所以需要修改优化等级
OBJS = main.o uart.o crc.o crc_cal.o para.o com_pc.o
EXE = SK_control
CFLAGS = -lm -lpthread -fsigned-char
EX = -g -O0$(EXE) : $(OBJS)$(CC) -o $(EXE) $(OBJS) $(CFLAGS)
main.o : main.c debug.h uart.h $(CC) -c main.c $(EX)
uart.o : uart.c uart.h debug.h$(CC) -c uart.c $(EX)
crc.o : crc.c crc.h debug.h$(CC) -c crc.c $(EX)
crc_cal.o : crc_cal.c crc_cal.h $(CC) -c crc_cal.c $(EX)
para.o : para.c para.h debug.h$(CC) -c para.c $(EX)
com_pc.o : com_pc.c com_pc.h debug.h $(CC) -c com_pc.c $(EX).PHONY : clean
clean :rm $(EXE) $(OBJS)
这篇关于VS Code GD调试嵌入式Linux程序无法断点调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!