OMNET++中如何实现代码逐行跟踪或运行到指定代码行?
OMNET++ 逐行源码调试操作指南
前置准备:开启带调试符号的编译
出现调试时显示汇编的核心原因是编译项目时没有生成调试符号,或是使用了开启优化的Release版本构建,优化会打乱代码执行顺序,导致源码行和执行逻辑无法对应。
按以下步骤配置编译:
- 如果你使用OMNET++ IDE:
- 右键点击目标项目,选择
Properties - 依次进入
C/C++ Build->Settings - 在
Tool Settings标签下,分别找到GCC C++ Compiler和GCC C Compiler的Debugging子项 - 勾选
Generate debug information,调试级别选择Level 3 (-g3)以获得最完整的调试信息 - 切换项目构建配置为
Debug,重新编译整个项目
- 右键点击目标项目,选择
- 如果你使用命令行编译:
- 执行
make clean清理之前的构建产物 - 执行
make MODE=debug直接生成带完整调试符号的可执行文件
- 执行
IDE模式下的逐行调试与断点设置
- 打开调试配置:点击顶部菜单栏
Run->Debug Configurations,找到对应你项目的OMNeT++ Simulation启动项,没有就新建一个 - 切换到
Debugger标签页,确认调试器选择GDB (DSF) Create Process Launcher,按需配置是否启动时停在main函数 - 保存配置后点击
Debug进入调试模式 - 要让程序停在指定代码行:直接点击对应代码行左侧的行号旁空白区域,会生成蓝色断点标记,程序运行到该行就会自动暂停
- 逐行跟踪操作使用调试面板的三个核心按钮即可:
Step Over(快捷键F6):逐行执行当前函数内的代码,遇到函数调用会直接执行完整个函数,不进入函数内部Step Into(快捷键F5):遇到函数调用时会进入函数内部,继续逐行执行Step Return(快捷键F7):直接执行完当前函数的剩余代码,返回到调用该函数的上一层代码处
注意:如果调试过程中不小心跳转到汇编界面,只需要在左侧调用栈面板点击你自己编写的代码对应的栈帧,就可以切回源码视图
命令行GDB模式下的调试操作
如果不使用IDE,也可以直接用GDB调试:
- 执行
gdb 你的仿真可执行文件名启动调试 - 设置指定行断点:输入
b 源码文件名:行号回车即可,例如b MyApp.cc:42就是在MyApp.cc的第42行设置断点 - 输入
r启动仿真程序,程序会自动停在你设置的断点处 - 逐行执行用
n命令(对应IDE的Step Over),进入函数用s命令(对应IDE的Step Into),退出当前函数用finish命令(对应IDE的Step Return)
内容的提问来源于stack exchange,提问作者Malak
相关产品推荐
相关产品推荐

