调试指南

来自SylixOS-wiki
(版本间的差异)
跳转至: 导航, 搜索
(启动debug服务器)
(开始调试)
 
(未显示2个用户的11个中间版本)
第1行: 第1行:
 
==说明==
 
==说明==
  
:本文描述SylixOS应用程序调试方法,文中examples应用程序实例参考[http://wiki.sylixos.com/index.php/%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97 入门指南]中的“examples示例工程”
+
:本文描述SylixOS应用程序调试方法,文中examples应用程序实例参考[http://wiki.sylixos.com/index.php/%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97 入门指南]中“5.6 编译examples工程”章节。
  
 
==编译下载程序==
 
==编译下载程序==
  
:需确认gcc优化调试选项设置为“-O0 -g3”。examples工程已设置正确。
+
:需确认gcc优化调试选项设置为“-O0 -g3”。本例examples工程使用SylixOS标准Makefile模板,在config.mk中将调试级别设置为debug即可,如下图:
 +
[[文件:Debug_Level_Setting.png]]
  
:程序编译和下载方法可参考[http://wiki.sylixos.com/index.php/%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97 入门指南]中的“examples示例工程”编译运行流程。
+
:程序编译和下载方法可参考[http://wiki.sylixos.com/index.php/%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97 入门指南]中“5.6 编译examples工程”章节。
  
 
==启动debug服务器==
 
==启动debug服务器==
第18行: 第19行:
 
  [root@sylixos_station:/home]# debug localhost:1234 ./hello_world
 
  [root@sylixos_station:/home]# debug localhost:1234 ./hello_world
 
  [GDB]Waiting for connect...
 
  [GDB]Waiting for connect...
:(注意:上面命令中“./hello_world”中的“./”不能忽略,否则程序加载器只会在$PATH路径下查找,而不会查找当前路径。)
+
:(注意:上面命令中“./hello_world”中的“./”不能忽略,否则程序加载器只会在$PATH路径下查找,而不会查找当前路径。)
  
由debug启动的应用程序在debug退出时会被强制杀死,以便重新开始下一轮调试。但是这是不安全的,因此如果在重新下一轮调试中发现系统运行不正常,应该重新启动系统。
+
:由debug启动的应用程序在debug退出时会被强制杀死,以便重新开始下一轮调试。但是这是不安全的,因此如果在重新下一轮调试中发现系统运行不正常,应该重新启动系统。
  
 
:第二种方式:先启动应用程序,然后启动debug服务器attach到应用程序。debug命令中需指定--attach选项,并监听网络接口和端口,后跟已启动的应用程序进程id。流程如下:
 
:第二种方式:先启动应用程序,然后启动debug服务器attach到应用程序。debug命令中需指定--attach选项,并监听网络接口和端口,后跟已启动的应用程序进程id。流程如下:
第47行: 第48行:
 
  [GDB]Waiting for connect...
 
  [GDB]Waiting for connect...
  
第二种方式启动的应用在debug退出时不会自动退出,而是继续运行,知道程序正常退出。
+
:第二种方式启动的应用在debug退出时不会自动退出,而是继续运行,直到程序正常退出。
  
 
==配置gdb==
 
==配置gdb==
第59行: 第60行:
 
[[文件:Select_manu_remote.png]]
 
[[文件:Select_manu_remote.png]]
  
:3、点击Search Project按钮,显示选中需要调试的hello_world工程。
+
:3、点击Search Project按钮,显式选中需要调试的hello_world工程。
  
 
[[文件:Select_debug_project.png]]
 
[[文件:Select_debug_project.png]]
第67行: 第68行:
 
[[文件:Debugger_configuration.png]]
 
[[文件:Debugger_configuration.png]]
  
:5、在Debugger属性页中,选中Connection选项卡,配置连接方式,连接方式选择TCP方式,并配置好IP和端口,IP和端口设置为debug监听的IP和端口,本例为192.168.7.30:1234。
+
:5、在Debugger属性页中,选中Connection选项卡,配置连接方式,连接方式选择TCP方式,并配置好目标板的IP和端口,IP和端口设置为debug监听的IP和端口,本例为192.168.7.30:1234。
  
 
[[文件:Debugger_connection.png]]
 
[[文件:Debugger_connection.png]]
第77行: 第78行:
 
:点击Debug按钮启动调试器,调试器界面如下,再第一次启动之后,也可以使用下图中红色标记的按钮选择并启动调试器。
 
:点击Debug按钮启动调试器,调试器界面如下,再第一次启动之后,也可以使用下图中红色标记的按钮选择并启动调试器。
  
[[文件:Start_debug.png]]
+
[[文件:remote_helloworld.png]]
  
 
==调试共享库==
 
==调试共享库==
第87行: 第88行:
 
[[文件:Debug_so_libraries.png]]
 
[[文件:Debug_so_libraries.png]]
  
:如过库文件源码不在项目中,则需在Debugger Configurations的Source属性页中添加源文件路径。
+
:如果库文件源码不在项目中,则需在Debugger Configurations的Source属性页中添加源文件路径。
  
 
[[文件:Debug_add_source.png]]
 
[[文件:Debug_add_source.png]]
第93行: 第94行:
 
==non-stop模式==
 
==non-stop模式==
  
:在一些应用中可能需要在调试当前线程时,进程的其它线程不停止运行,这就需要用到gdb的non-stop模式。使用non-stop模式的方法是,在Debugger Configurations的Debugger属性页下的Main选项卡下选中Non-stop mode复选框。
+
:在一些应用中可能需要在调试当前线程时,进程的其它线程不停止运行,这就需要用到gdb的non-stop模式。使用non-stop模式的方法是,
 +
在Debugger Configurations的Debugger属性页下的Main选项卡下选中Non-stop mode复选框。
  
 
[[文件:Debug_non_stop_mode.png]]
 
[[文件:Debug_non_stop_mode.png]]

2015年5月13日 (三) 15:28的最后版本

目录

[编辑] 说明

本文描述SylixOS应用程序调试方法,文中examples应用程序实例参考入门指南中“5.6 编译examples工程”章节。

[编辑] 编译下载程序

需确认gcc优化调试选项设置为“-O0 -g3”。本例examples工程使用SylixOS标准Makefile模板,在config.mk中将调试级别设置为debug即可,如下图:

Debug Level Setting.png

程序编译和下载方法可参考入门指南中“5.6 编译examples工程”章节。

[编辑] 启动debug服务器

SylixOS debug服务器提供两种启动方式。
第一种方式:由debug服务器启动应用程序。在命令中指定监听的网络接口和端口,后跟需要启动的应用程序路径和参数。流程如下:
[root@sylixos_station:/]# cd /home
[root@sylixos_station:/home]# debug localhost:1234 ./hello_world
[GDB]Waiting for connect...
(注意:上面命令中“./hello_world”中的“./”不能忽略,否则程序加载器只会在$PATH路径下查找,而不会查找当前路径。)
由debug启动的应用程序在debug退出时会被强制杀死,以便重新开始下一轮调试。但是这是不安全的,因此如果在重新下一轮调试中发现系统运行不正常,应该重新启动系统。
第二种方式:先启动应用程序,然后启动debug服务器attach到应用程序。debug命令中需指定--attach选项,并监听网络接口和端口,后跟已启动的应用程序进程id。流程如下:
1、启动应用程序。
[root@sylixos_station:/]# cd /home
[root@sylixos_station:/home]# ./hello_world
2、由于现有telnet终端连接已经被应用程序占用,需新建telnet终端连接。
3、在新建的telnet终端连接上查询应用程序进程id。
[root@sylixos_station:/]# ps
      NAME             FATHER        PID   GRP   MEMORY    UID     GID    USER
----------------- ----------------- ----- ----- -------- ------- ------- ------
kernel            <orphan>              0     0        0       0       0 root
hello_world       <orphan>              1     1    65536       0       0 root
total vprocess : 2
4、启动debug服务器并attach到应用程序。
[root@sylixos_station:/]# debug --attach localhost:1234 1
[GDB]Waiting for connect...
第二种方式启动的应用在debug退出时不会自动退出,而是继续运行,直到程序正常退出。

[编辑] 配置gdb

1、在eclipse下点击Run->Debug Configurations菜单,选择C/C++ Remote Application,新建一个调试器对象,命名为remote_helloworld。

New debug object.png

2、点击Select Other按钮,选择目标程序启动方式,这里选中手动启动方式。

Select manu remote.png

3、点击Search Project按钮,显式选中需要调试的hello_world工程。

Select debug project.png

4、选中Debugger属性页,在GDB debugger编辑框输入arm-none-eabi-gdb,在GDB command file编辑框输入空。

Debugger configuration.png

5、在Debugger属性页中,选中Connection选项卡,配置连接方式,连接方式选择TCP方式,并配置好目标板的IP和端口,IP和端口设置为debug监听的IP和端口,本例为192.168.7.30:1234。

Debugger connection.png

5、点击Apply按钮应用调试配置。

[编辑] 开始调试

点击Debug按钮启动调试器,调试器界面如下,再第一次启动之后,也可以使用下图中红色标记的按钮选择并启动调试器。

Remote helloworld.png

[编辑] 调试共享库

首先需要将依赖的库文件拷贝到目标板的搜索路径下,本例将libhello_library.so拷贝到hello_world程序所在目录。
在Debugger Configurations的Debugger属性页下的Shared Libraries选项卡中点击add按钮,添加库文件所在路径。

Debug so libraries.png

如果库文件源码不在项目中,则需在Debugger Configurations的Source属性页中添加源文件路径。

Debug add source.png

[编辑] non-stop模式

在一些应用中可能需要在调试当前线程时,进程的其它线程不停止运行,这就需要用到gdb的non-stop模式。使用non-stop模式的方法是,

在Debugger Configurations的Debugger属性页下的Main选项卡下选中Non-stop mode复选框。

Debug non stop mode.png

个人工具
名字空间

变种
操作
导航
工具