(GDB) GDB调试技巧,调试命令
调试时查看依赖DSO
pidof tvm_rpc_server
cat /proc/<pid_of_tvm_rpc_server>/maps
子进程调试
1.vscode -- launch.json
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}, {
"description": "libs for gdb",
"text": "set environment LD_LIBRARY_PATH=${workspaceFolder}/output/cpu_simu_dev/bin:$LD_LIBRARY_PATH",
"ignoreFailures": false
}, {
"description": "debug forked child",
"text": "-gdb-set follow-fork-mode child",
"ignoreFailures": false
}
调试跟try{...} catch(...){...}相关的问题(表现为崩溃后,调用栈没有用户代码,或者没有GDB中断)。
点击暂停调试,调试控制台中执行:
-exec catch throw
2.gdb
gdb --args ./tvm_rpc_server --port=9080
gdb> set follow-fork-mode child
gdb> catch throw
补充知识:catch point
有时程序中有未捕获的异常会导致程序异常的行为甚至导致程序的直接退出。 这对服务器程序来说是不可接受的。
可以使用gdb的catch命令来帮助我们调试异常。
使用gdb捕获异常的扔出点(相当于在扔出异常的地方添加断点):
catch throw
使用gdb捕获线程退出(相当于在线程退出的时候添加断点):
catch pthread_exit
这样,如果相应的事件发生,gdb就会中断程序的执行, 就可以使用gdb的bt命令来检查出现错误的调用栈了。
cache命令:
(gdb) help catch
Set catchpoints to catch events.
Raised signals may be caught:
catch signal - all signals
catch signal <signame> - a particular signal
Raised exceptions may be caught:
catch throw - all exceptions, when thrown
catch throw <exceptname> - a particular exception, when thrown
catch catch - all exceptions, when caught
catch catch <exceptname> - a particular exception, when caught
Thread or process events may be caught:
catch thread_start - any threads, just after creation
catch thread_exit - any threads, just before expiration
catch thread_join - any threads, just after joins
Process events may be caught:
catch start - any processes, just after creation
catch exit - any processes, just before expiration
catch fork - calls to fork()
catch vfork - calls to vfork()
catch exec - calls to exec()
Dynamically-linked library events may be caught:
catch load - loads of any library
catch load <libname> - loads of a particular library
catch unload - unloads of any library
catch unload <libname> - unloads of a particular library
The act of your program's execution stopping may also be caught:
catch stop
C++ exceptions may be caught:
catch throw - all exceptions, when thrown
catch catch - all exceptions, when caught
Do "help set follow-fork-mode" for info on debugging your program
after a fork or vfork is caught.
Do "help breakpoints" for info on other commands dealing with breakpoints.
参考:
使用gdb调试异常
gdb doc -- Setting Catchpoints
- vscode调试补充1
出现找不到glibc的情况。
无法打开“pthread_join_common.c”: 无法读取文件'vscode-remote://ssh-remote+192.168.33.205/build/glibc-S9d2JN/glibc-2.27/nptl/pthread_join_common.c' (Error: 无法解析不存在的文件 'vscode-remote://ssh-remote+192.168.33.205/build/glibc-S9d2JN/glibc-2.27/nptl/pthread_join_common.c')。
此时在launch.json中添加如下设置:
"sourceFileMap": {
"/build/glibc-S9d2JN": "/usr/src/glibc"
}
- gdb调试补充
调试时,查看进程空间调用的DSO及其路径,内存map:
cat /proc/<pid>/maps
(GDB) GDB调试技巧,调试命令的更多相关文章
- Xcode 调试技巧 --常用命令和断点
Xcode 中的调试技巧与我们的日常开发息息相关,而这些调试技巧在我们解决Bug时,常常有事半功倍的作用,经常会用到的有各种断点 和 命令.而这些调试技巧也经常会在面试中问到,所以不知道的就来看看吧. ...
- 很多.net 程序员不知道又非常重要的 .net高级调试技巧.调试别人的dll方法内的变量
事情是这样的, 最近需要开发Orcale的数据库. 于是使用了EF 加上 Oracle.ManagedDataAccess.Client 这个Oracle.ManagedDataAccess 很好用, ...
- VS2017调试技巧
Visual Studio的调试技巧 调试技巧是衡量程序员水平的一个重要指标.掌握好的调试技巧与工具的使用方法,也是非常重要的.*** 演示环境: VS2017C#*** 演示用的代码: publ ...
- gdb命令调试技巧
gdb命令调试技巧 一.信息显示1.显示gdb版本 (gdb) show version2.显示gdb版权 (gdb) show version or show warranty3.启动时不显示提示信 ...
- 【转贴】gdb中的信号(signal)相关调试技巧
一篇不错的帖子,讲的是gdb中的信号(signal)相关调试技巧 转自Magic C++论坛 http://www.magicunix.com/index_ch.html http://www.m ...
- GDB调试技巧:总结篇
目录 一 写在开头 1.1 本文内容 二 学习资料 三 常用命令 四 调试技巧 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 写在开头 1.1 本文内容 总结GDB调试的一些常用命令和调试 ...
- pwn 题GDB调试技巧和exp模板
GDB分析ELF文件常用的调试技巧 gdb常用命令 首先是gbd+文件名 静态调试 ,gdb attach +文件名 动态调试 为了方便查看堆栈和寄存器 最好是安装peda插件 安装 可以通过pip直 ...
- 调试多线程 & 查死锁的bug & gcore命令 & gdb对多线程的调试 & gcore & pstack & 调试常用命令
gdb thread apply all bt 如果你发现有那么几个栈停在 pthread_wait 或者类似调用上,大致就可以得出结论:就是它们几个儿女情长,耽误了整个进程. 注意gdb的版本要高于 ...
- 使用GDB命令行调试器调试C/C++程序
原文:http://xmodulo.com/gdb-command-line-debugger.html作者: Adrien Brochard 没有调试器的情况下编写程序时最糟糕的状况是什么?编译时跪 ...
- GDB调试——常用的命令
首先说明一点,如果我们要使用GDB来调试我们的C/C++程序时,在使用GCC编译程序时,应该带上 –g 参数, 它负责生成 与GDB相关的调试信息: 1.如何对一个文件启动GDB调试? 方法一: 命令 ...
随机推荐
- spark 读取hive 计算后写入hive
package com.grady import org.apache.spark.SparkConf import org.apache.spark.sql.{DataFrame, Row, Spa ...
- 【读书笔记】C#高级编程 第三章 对象和类型
(一)类和结构 类和结构实际上都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法. 类和结构的区别:内存中的存储方式.访问方式(类是存储在堆上的引用类型,结构是存储在栈的值类型)和它 ...
- haodoop新特性
Hadoop2.x新特性 scp实现两个远程主机之间的文件复制 scp -r hello.txt root@hadoop103:/user/atguigu/hello.txt // 推 push sc ...
- Bert不完全手册8. 预训练不要停!Continue Pretraining
paper: Don't stop Pretraining: Adapt Language Models to Domains and Tasks GitHub: https://github.com ...
- Python数据科学手册-Numpy数组的计算:比较、掩码和布尔逻辑,花哨的索引
Numpy的通用函数可以用来替代循环, 快速实现数组的逐元素的 运算 同样,使用其他通用函数实现数组的逐元素的 比较 < > 这些运算结果 是一个布尔数据类型的数组. 有6种标准的比较操作 ...
- Confluence预览中文附件出现乱码
转载自:https://blog.51cto.com/u_13776519/5329428 背景介绍: 1.使用docker方式安装运行的Confluence 2.进行了破解,使用外置数据库 3.do ...
- 五、frp内网穿透客户端frpc.ini各配置参数详解
[必须]标识头[common]是不可或缺的部分 [必须]frps服务端IPserver_addr = 0.0.0.00.0.0.0为FRP服务端IP,客户端要填写为服务端已配置的对应的IP,或者是服务 ...
- 连接Vue.js作为前端,Fastapi作为后端
项目结构 ├── main.py └── templates └── home.html 环境安装 pip install fastapi[all] pip install jinja2 Backen ...
- Elasticsearch的mapping讲解
映射是定义文档及其包含的字段的存储和索引方式的过程. 映射定义具有: 元字段 元字段用于自定义如何处理关联的文档元数据.包括文档 _index,_id和 _source领域. 字段或属性 映射包含pr ...
- 一文读懂Apache Geode缓存中间件
目录 一.对缓存中间件的诉求 1.1 我们为什么需要缓存中间件 1.2 缓存的分类 1.1.1 弱势缓存 1.1.2 强势缓存 二.什么是Apache Geode 2.1 Apache Geode的架 ...