前言

在开发过程中,使用gdb远程调试时,会碰到 Linux 服务器的网段和板载设备的网段不是一样的,不能正常使用 gbd 远程调试功能。

板载设备和电脑连接路由器,属于同一个网段,如192.168.1.1,而路由器和Linux服务器属于另一个网段,如10.20.51.251。

问题

板载设备和电脑可以互相ping通,板载设备或电脑也能ping通Linux服务器,但Linux服务器却不能ping通板载设备或电脑。

板载设备或电脑能ping通Linux服务器是因为路由器和服务器属于同一网段,所以通过路由器转发即可ping通,服务器可以ping通路由器的IP,但是无法ping通路由器下面的局域网IP

由于服务器不能ping通板载设备,自然无法使用gdb远程调试,在服务器调试时输入以下指令后出现以下错误(参考在海思芯片上使用GDB远程调试)。

# ./arm-himix200-linux-gdb test
...
(gdb) target remote 192.168.1.102:8005
192.168.1.102:8005: 连接超时.
(gdb)

解决办法

启用路由器的DMZ主机功能,添加板载设备的IP地址即可

关于DMZ主机,实际上就是把内网中的一台主机暴露在外网,直接使用公网IP,这样可以和外网一样。

可以简单地理解成访问路由器IP,就是透传访问DMZ主机设置的IP。

假设板载设备的IP是“192.168.1.140”,路由器的IP是“10.20.51.100”,服务器的IP是“10.20.51.120”。

在使用 GDB 远程调试时,板载设备执行gdbserver,连接的是服务器的IP地址。

# ./gdbserver --remote-debug 10.20.51.120:8005 test

在服务器上运行gdb,连接使用的是路由器的IP地址,而不是板载设备的IP地址。

# ./arm-himix200-linux-gdb test
...
(gdb) target remote 10.20.51.100:8005
Remote debugging using 10.20.51.100:8005
Reading /lib/ld-linux-armhf.so.3 from remote target...
Reading /lib/ld-linux-armhf.so.3 from remote target...
Reading symbols from target:/lib/ld-linux-armhf.so.3...(no debugging symbols found)...done.
0x76fcebc0 in ?? () from target:/lib/ld-linux-armhf.so.3
(gdb)

此时可以正常使用 gdb 的远程调试功能了。

如何设置路由器的DMZ主机功能:

  1. 以 TP-LINK 路由器为例,登录路由器的设置界面,应用管理,点击DMZ主机

  2. 启用DMZ主机功能,输入板载设备的IP地址,保存即可。

不同网段之间实现GDB远程调试功能的更多相关文章

  1. JVM远程调试功能

    有时候想调试线上的程序 可以启用远程调试功能 在本地调试远程代码. 远程JVM启用调试模式 /usr/local/jdk/bin/java -server -Xms256m -Xmx256m -XX: ...

  2. tomcat如何正确的开启远程调试功能

    在日常开发中,有时需要对远程服务器上的应用进行远程调试,对于tomcat,要进行远程调试其实很简单,只需要在启动tomcat时开启jpda服务即可. 什么是JPDA呢? JPDA(JavaPlatfo ...

  3. [转] 在安卓设备上使用 Chrome 远程调试功能

    你的网页内容在移动设备上的体验可能和电脑上完全不同.Chrome DevTools 提供了远程调试功能,这让你可以在安卓设备上实时调试开发的内容. 安卓远程调试支持: 在浏览器选项卡中调试网站. 在原 ...

  4. tomcat如何正确的开启远程调试功能(转)

    转自:http://blog.csdn.net/mhmyqn/article/details/49209541 版权声明:本文为博主原创文章,未经博主允许不得转载. 在日常开发中,有时需要对远程服务器 ...

  5. 在海思芯片上使用GDB远程调试

    1 前言 使用海思平台上(编译工具链:arm-himix200-linux)交叉编译 GDB 工具(使用版本8.2,之前用过10.2的版本,在编译 gdbserver 遇到编译出错的问题,因为关联了其 ...

  6. vs2012远程调试功能的改进

    不知道大家有没有遇到过这种情况,刚开发完的程序,明明在本机能够好好的运行,可是部署到服务器过分发给用户时,总是出现莫名其妙的错误. 一时半会又看不出问题来,怎么办呢?难道只能在服务器或是客户电脑上装一 ...

  7. gdb 远程调试android进程 -转

    什么是gdb 它是gnu组织开发的一个强大的unix程序调试工具,我们可以用它来调试Android上的C.C++代码. 它主要可以做4件事情: 随心所欲地启动你的程序. 设置断点,程序执行到断点处会停 ...

  8. Gdb远程调试Linux内核遇到的Bug

    知识共享许可协议本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/gdb-bug 本博客同步在http://www.cn ...

  9. [转载]eclipse的远程调试功能配置

    原文地址:eclipse的远程调试功能配置作者:我的 用途:web应用部署并运行于外部(区别于eclipse环境中启动的)应用服务器中,当出现问题时,可以使用eclipse工程的源代码进行跟踪调试. ...

  10. gdb 远程调试android进程

    原文:http://blog.csdn.net/xinfuqizao/article/details/7955346?utm_source=tuicool 什么是gdb 它是gnu组织开发的一个强大的 ...

随机推荐

  1. vue 调试工具vue-devtools 安装

    一.下载 工具vue-devtools 注:必须是5.1.1版本 比这个版本高的试过,没法正确使用. https://github.com/vuejs/vue-devtools/tree/v5.1.1 ...

  2. <vue 路由 7、导航守卫>

    导航守卫 一.     知识点 1.什么是导航守卫? (1)vue-router提供的导航守卫主要用来监听路由的进入和离开. (2)vue-router提供了beforeEach和afterEach的 ...

  3. 记一次el-checkbox包裹一层div,点击div勾选复选框,点击复选框却没反应的bug

    <div class="account-item" v-for="item in accountList" :key="item.id" ...

  4. px2vw一个px单位转成vw单位的VSCode插件

    px2vw 一个 px 单位转成 vw 单位的 VSCode 插件

  5. nginx和前端

  6. 【QtJson】用Qt自带的QJson,直接一步到位封装和解析一个类的实例对象!

    之前貌似没有看过类似的代码 我们现在的要求就是直接在不知道类成员的情况下,把一个类丢进去就能生成一个Json字符串,也可以把一个字符串和一个类成员丢进去就能根据成员变量名匹配到元素并赋值,大概就这样 ...

  7. IDE暗黑主题推荐-Dracula

    作为程序员,我们一天中会花费大量时间在编码和阅读代码上.优秀的代码编辑器主题可以减轻眼睛的疲劳,提高工作效率.本文向大家推荐一款非常流行的 JetBrains IDE 主题插件 - Dracula.它 ...

  8. java进阶(37)--多线程

    文档目录: 一.进程与线程 二.多线程的实现 三.获取线程名与线程对象 四.线程sleep方法 五.线程调度与优先级 六.线程安全(重点) 七.死锁 ------------------------- ...

  9. java基础(13)--静态变量、静态代码块、实例代码块

    一.静态变量/静态代码块特点: 1.类加载时执行静态代码块,并初始化静态变量 2.先于main()执行 3.只加载一次 4.可访问静态变量,不可访问实例变量   二.实例语句块: 1.需要实例化,对象 ...

  10. WebApi允许跨域

    services.AddCors(options => { options.AddPolicy("abc", builder => { //App:CorsOrigin ...