调试

麒麟V10 SP1系统VSCode远程调试(Server)报错问题

最近在尝试国产Linux操作系统麒麟V10(SP1),由于主力敲代码机器还是Windows,所以需要搭建一个远程编译、调试的开发环境,毫无疑问,Visual Studio Code是一个很好的选择,之前也挺轻松的搭建过配合CentOS、Ubuntu系统的远程编译调试环境,不过这次搭麒麟系统却踩了个坑:

Failed to set up socket for dynamic port forward to remote port

VSCode在setup remote时,下载安装server都没问题,但是后面就会报上面的错。网上搜索了下,发现是sshd服务没有开启AllowTcpForwarding导致的,于是:

sudo vi /etc/ssh/sshd_config

找到AllowTcpForwarding,将参数值调整为yes,当然如果是注释状态还要取消注释,然后重启sshd服务:

sudo systemctl restart ssh

重启后,再次尝试,结果报错依旧。研究了一番后发现这个问题在网上并不罕见,但大部分都围绕的是上面提到的这个配置项。不知道是不是麒麟系统的ssh服务默认配置与其他常见发行版不同,最终发现这个问题出在sshd_config中的PermitOpen这个配置,将它设置为any,重启服务后问题解决!

FFmpeg原生脚本构建windows debug版的调试跟踪问题

这次要记录的感觉是个比较硬核的问题,限于标题字数限制,没法准确表达出所有问题,比如,调试断点单步跟踪FFmpeg代码时,代码不按顺序执行,满处乱飞,断点位置查看周围局部变量,不能正常显示值,比如这样:

局部变量offset无法显示当前值,而是显示“Variable is optimized away and not available.”的信息,看字面意思可以猜到,代码被编译器做了优化了,比如直接内联省去中间变量,所以看不到了。

但是,FFmpeg的构建configure参数确实设置了

–disable-optimizations –enable-debug –disable-stripping

这些官方说明的构建debug版的参数,怎么实际调试的时候还是会出现上面描述的种种看起来是代码被优化了造成的调试跟踪障碍呢?

Continue reading…

使用Android Studio 3.0+调试任意环境生成的APK中的Java和Native C/C++代码(APK调试debug)

自从Google抛弃Eclipse ADT转投IntelliJ IDEA搞出Android Studio后,Android的开发调试环境可以说是日臻完善,先是Android Studio 2.x加入了调试原生C/C++代码的功能,一解Android NDK开发调试不方便之困(想当年可是拜ndk开发调试所赐才熟练掌握了gdb命令行的各种操作…),现在的3.x又加入了直接调试任意apk中Java和native .so的功能:

测试了下,虽然过程中遇到了个小问题,不过最终还是成功了,基本能和AS开发的带C++ Support项目原生调试体验一致。下面记录下这个”小问题“的解决方法:
先说明下这个小问题是用AS调试任意apk中的.so时找不到调试符号,且无法定位到源码并命中断点的问题,也就是说是有源码调试!无源码调试理论上应该也可以,但不在本次研究范围之内。
Continue reading…