惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 【当耐特】
小众软件
小众软件
S
SegmentFault 最新的问题
GbyAI
GbyAI
量子位
爱范儿
爱范儿
L
LangChain Blog
Vercel News
Vercel News
A
About on SuperTechFans
腾讯CDC
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
月光博客
月光博客
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
U
Unit 42
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX
V
Visual Studio Blog
美团技术团队
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium

博客园 - 普罗大众

debug的一个问题 phy_simulators之nr_dlsim之4层接收的优化 phy_simulators之nr_dlsim之一个bug phy_simulators之nr_dlsim开始 phy_simulators之nr_pbchsim之PBCH解码 phy_simulators之nr_pbchsim之PBCH-DMRS检测 phy_simulators之nr_pbchsim之仿真的局限 phy_simulators之nr_pbchsim之一些结构 phy_simulators之nr_pbchsim之SSS检测 phy_simulators之nr_pbchsim之信道 phy_simulators之nr_pbchsim之初始同步 phy_simulators之nr_pbchsim之发送端 phy_simulators之nr_pbchsim之PSS检测 phy_simulators之dlsim.c debug方法三:printf debug方法一:直接用gdb命令 phy_simulators的编译生成方法三:CMakePresets.json phy_simulators的编译生成方法二:手动写cmake脚本 phy_simulators的编译生成方法一:build_oai --phy_simulators open air interface的phy_simultors编译过了 AI App的使用感觉 从“图像视频编码”到“通信物理层” MAC pc + Ubuntu + OAI 原来Fourier是法国的,怪不得法国小波分析这么牛 整理心情
debug方法二:用vs code
普罗大众 · 2026-02-26 · via 博客园 - 普罗大众

 点command pallete,一顿选择,可以自动生成一个.vscode文件夹和它下面的launch.json文件,改成需要的programe/cwd这些,在调试dlsim时发现,有些问题。

例如,uint未定义,NB_ANTENNAS_TX未定义。

感觉编译已经把这些编进debug info里了,但vs code执行自己那个debug框架时没有识别出来。

按照网络上的方法,在CMakeLists.txt加了add_compile_options(-g3),也不行。。。

发现CMAKE_C_FLAGS_DEBUG还是g,用了set(CMAKE_C_FLAGS_DEBUG, " -g3")才改成g3,但vs code调试还是不行。。。

而且CMAKE_C_FLAGS不能随便修改

CMAKE_C_FLAGS: -gdwarf-2 -mcpu=native -lgcc -lrt -march=native -pipe -fPIC -Wall -fno-strict-aliasing -rdynamic -Wno-packed-bitfield-compat -std=gnu11 -funroll-loops

还需要再研究吧

始终报错uint未定义,NB_ANTENNAS_TX未定义,但好像能够单步调试了,需要保证launch.json和tasks.json基本正确吧。

还有,用不同的target,如nr_pbchsim、nr_dlsim,需要同时改动launch.json和tasks.json(它们里面都需要设置执行程序),否则会出现奇怪的问题。。。而且这些问题很难确认,因为对json文件的解释是内置在vs code里的。

用vs code debugging是,有时main函数开头就出错(segmentation fault):

1)可能是所谓的“野指针”,可能是切换不同的target导致的,此时,可以删除ran_build/build文件夹,重新生成target

2)后续发现还是会出错,最终百度了下,发现是代码启动了ASon机制,在main函数开头就进行了参数检验,导致vs code报错,百度写的:

您的程序崩溃并非由 -U 参数格式或代码逻辑错误引起,而是由 ‌AddressSanitizer (ASan) 与 VS Code 调试环境不兼容‌ 导致的。具体来说:

  1. ‌ASan 初始化冲突‌:您的代码中定义了 __asan_default_options() 函数,表明程序编译时启用了 ASan 内存检测工具。ASan 会在 main 函数执行之前进行复杂的运行时初始化,包括拦截内存分配函数、设置影子内存等。

  2. ‌调试器信号处理冲突‌:当您设置 "stopAtEntry": true 时,GDB 会在程序入口点(通常是 _start 或 main)暂停。然而,ASan 的初始化代码在 main 之前运行,可能会触发内部信号(如 SIGSEGV),这些信号被 GDB 捕获并中断,导致程序无法正常完成初始化。

  3. ‌环境变量配置问题‌:虽然您已经配置了 ASAN_OPTIONS,但 "stopAtEntry": true 与 ASan 的冲突是更根本的问题。

 代码里的确在main函数前就有一个参数检查:

const char *__asan_default_options()
{
/* don't do leak checking in nr_ulsim, not finished yet */
return "detect_leaks=0";
}

3)后面还是出现了main函数开头就出错,当跑vs code的debugging时,但直接运行不会报错。百度提示两者不一致,可能跑的target不一样,于是直接运行时用的是vs code debugging生成的target,并echo $?,发现也会有exit(1)的现象,说明此时直接运行和vs code debugging的结果一致,都有exit(1),至于为何vs code debugging开始就exit(1),可能是ASon在main之前就进行了一些操作吧,并给vs code发了信号,vs code捕获到该信号就退出了。百度提示用gdb(模拟vs code debugging效果)来打印一些退出信息,包括gdb break exit, gdb bread abort,bt等,但打印信息很少。后来觉得是-U 3 0 0 2这种参数输入导致了野指针的问题。。。先去除掉-U参数试验

4)通过百度,知道OAI的vs code segmentation fault问题是很多人碰到的。。。用了很多方法都不行,后来偶尔一次就好了,不知道怎么好的。。。总的来说,只知道问题原因,不知道如何解决的,问题原因是:vs code在debug时内部启动了一些初始化流程,对全局变量和静态函数,会调用strtol函数,导致对野指针的访问,于是在main函数开始前就崩溃了。但如何避免这种野指针,还是没找到办法,毕竟封装在vs code里的,而且在main函数前,只是在debug console窗口里看到strtol报错的信息而已。。。网络上很多人的解法也大多是对launch.json做一些限制,避免vs code启动初始化流程带来的影响。。。感觉OAI代码本身不是在vs code里调制的。。。还有,感觉编译还是在不用vs code提供的preLaunchTask脚本,而是手动在终端里编译,preLaunchTask调用tasks.json,里面的参数跟手动的可能不一致。。。还有,全局变量有些是指针,最好赋值成NULL,以防万一吧