GDB调试,相关命令及环境处理
GDB调试,相关命令及环境处理
Mango酱
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
05-----关于C++使用VS时出现 error C2248: “xxx“ 无法访问private成员(在“MySpdlog“类中声明)
一 问题描述项目中遇到一下问题,需要写个测试程序,但是在搭建的过程中,出现错误的,心想,代码一样的,怎么就报错了呢。于是开始查找问题。错误如下:因为我的测试程序文件不算多,就5个,代码也不多,于是我使用软件进行对比正确的代码和错误的代码,结果发现都是一样的。这个过程就花了我一个小时左右了。那么这就奇怪了,为什么呢。解决思路也不难,将这5个文件逐个将正确的代码拷贝到错误的文件,结果发现到了某个文件a时,拷完正确的代码过去后,错误消失了。心想使用vscode对比错误的代码和正确的代码,发现就是一样的。原创 2021-12-22 19:40:42 · 2335 阅读 · 0 评论 -
04-----无法执行二进制文件: 可执行文件格式错误
这个问题一般是gcc的命令参数导致的。例如我在cmake添加如下参数:#set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -g -ggdb3 -Wall -std=c++11 -fPIC")生成的可执行文件会很小,在生成的服务器能执行,但是移植到其它服务器后就报上面的错误。归根到底是-O0的原因,具体这个参数可以自行百度,这个当时我遇到这个问题也花了不少时间,后来查阅相关资料说和make的参数有关,所以不断调试参数后才发现是-O0导致的。去掉重新编译即原创 2021-07-19 16:03:15 · 19270 阅读 · 3 评论 -
03-----git Problem with the SSL CA cert (path? access rights?)解决方法
原因是丢失了某些ssl的验证文件,重新下载或者更新即可。ls /etc/pki/tls/certs/ca-bundle.crt #查看是否存在ca-bundle.crtsudo apt-get install ca-certificates #实际上只输入该命令即可。参考文章:git Problem with the SSL CA cert (path? access rights?)。注意Ubuntu下改成apt。...原创 2021-07-11 13:49:47 · 1372 阅读 · 0 评论 -
02-----linux下多线程程序占用虚拟内存非常高
一 业务场景分析因为多线程在平时是非常常见的,最近有点空,想自己写个线程池而不是用别人写好的。所以开撸,发现当我在调试一个线程池时,发现使用了一两个小时后,虚拟内存占用得非常高。然后我开始分析,一开始我先写了一个不带调整线程的线程池,发现线程池开启几个小时后,虚拟内存都是很稳定,基本也就正常的几百m。而当我添加了调整线程后,发现同样一个小时多后,虚拟内存变得非常的大,达到20g左右。 注:这里调整线程的作用是:可以根据任务数的大小自动调整线程池中线程的数量,所以就涉及线程的添加和销毁。1 测试经过原创 2021-05-25 21:32:58 · 7137 阅读 · 0 评论 -
01-----关于更换网络之后,xshell无法连接虚拟机(之前还能连接)
1 解析我本来在一个网络中是正常能使用xshell连接我的本地虚拟机的,但是后面回到家里的wifi后,突然就连不上了。经过排查,发现是新的wifi的与原本建立好的网络环境不一致,具体是ip不在同一网段,重新配置一下。例如我是这样操作的,看第2点。2 解决参考我之前写的文章01虚拟机下配置linux的网络上网(包括ssh,gcc,g++的安装),只需要重复将3-8的步骤重复一次即可。例如我的本次修改:首先在windows查看新的wifi的网关信息。然后将ipv4地址换成同一网段(是否同一网段看这原创 2021-05-01 12:33:08 · 2935 阅读 · 7 评论 -
16-----Linux连接Mysql时报出xxx is not allowed connected this mysql错误
1 解析上述问题是由于我们linux下的mysql只支持本地的root用户连接,而不允许外部连接造成的。和3306端口是否没有太大的关系,具体如何开放一个端口可以参考这篇文章Linux下开放某个端口(永久有效)。2 解决mysql -u root -p //登录数据库use mysql //进入mysql数据库select Host,User from user; //查看可以访问数据库的ip可以看到只有root用户可以登录。所以需要给别人可以登录的权限。修改表:upd.原创 2021-04-30 11:46:38 · 313 阅读 · 0 评论 -
15-----Linux下开放某个端口(永久有效)
1 安装sudo apt-get install iptables2 添加规则sudo iptables -I INPUT -p tcp --dport 3306 -j ACCEPT3 保存规则 sudo iptables-save完成上述命令我们就完成了开放指定的端口,但是如果此时服务器重启,上述规则就没有了,所以我们需要对规则进行一下持续化操作.4 持续化规则,安装iptables-persistentsudo apt-get install iptables-persistent原创 2021-04-30 11:37:26 · 1239 阅读 · 0 评论 -
14-----关于error while loading shared libraries: xxx.so: cannot open shared object file: No such file
一 linux找不到动态链接库 .so文件的解决方法关于这种问题,很明显是自己生成的动态库在被使用时,无法找到准确的路径而导致的。1 问题分析首先运行可以执行程序,若出现上述错误,说明找不到动态库的路径。我们需要使用ldd去查看哪个动态库缺少了。./nginxldd ./nginx | grep "not found"find / -name libOnvif_Client.so 2> /dev/null #不是root可能需要加sudo然后找到这些缺少的动态库路径。找到后该路原创 2021-04-20 14:34:46 · 620 阅读 · 0 评论 -
13-----使用strace,跟踪某个进程的堆栈,查看其线程数和使用mmap内存的情况(一般用于配合检查内存泄漏或者提高程序性能方面)
直接看下面命令即可。strace -f -e"brk,mmap,munmap" -p $(pidof DHDVR)//跟踪某个进程的堆栈,查看其线程数和使用mmap内存的情况//其中://-f 跟踪目标进程,以及目标进程创建的所有子进程//-e 控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称,-e一般用于指定系统调用的名称//-p 指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可。//$(pidof DHDVR)代表求出对应进程的pid额外配合上面查看内存情况原创 2021-04-01 14:49:01 · 1747 阅读 · 0 评论 -
12-----关于调试SRS和follow-fork-mode,detach-on-fork的说明
1 follow-fork-mode,detach-on-fork看下面的图表。follow-fork-modedetach-on-fork说明parenton只调试主进程( GDB 默认)childon只调试子进程parentoff同时调试两个进程, gdb 跟主进程, 子进程 block 在 fork 位置childoff同时调试两个进程, gdb 跟子进程, 主进程 block 在 fork 位置2 查看一下进程和线程的信息//1 查原创 2021-04-01 09:39:17 · 1163 阅读 · 0 评论 -
11-----curl命令行代替post请求带baby
1 curl命令行代替post请求带baby使用curl命令行代替postman在linux是非常方便的。curl -H "Content-Type:application/json" -X POST --data "{\"camera_uid\": [\"123-456-abc\"]}" http://192.168.1.1:8890/push/v1/server/code原创 2021-04-01 09:08:27 · 404 阅读 · 0 评论 -
10-----关于gdb断点的所有操作总结
1 设置断点的方法以下例子都是经过我本人测试的,例子为调试SRS服务器。1)b+行号2)b+函数名 /*例如b main。注意,函数名打断点时只能打最外层的函数,例如gdb a.out后,只能打和main同级的函数名,而mian内部的函数是无法打到断点的。并且即使你已经在运行到main函数的某一行例如第一行,它也是无法打到内部函数的断点,它会报函数未定义的错,而且优化后的静态函数和inline函数等,可能就无法触发断点。所以不建议使用函数名打断点。*/3)b+文件名路径:行号 /原创 2021-04-01 09:08:10 · 2461 阅读 · 0 评论 -
09-----检测对方网络是否正常在线的方法
1 使用pingping是我们经常检测对方能否正常通信的方法,它使用的协议是传输层中的ICMP,下面是我自己抓包的内容。2 使用telnettelnet一般是检测某个端口是否开放。格式为:telnet ip port3 使用nc命令模拟客户端请求连接,有点像telent,但是实际会有相应数据返回,而telnet只是检测网络和端口是否开放。nc的使用格式,具体可以使用-h帮助查看。nc ip port...原创 2021-03-31 17:00:35 · 782 阅读 · 0 评论 -
08-----查找某个文件的路径
1 使用find命令查找关于find这个命令,非常强大,它可以根据文件大小,属性,用户,文件名等去查找匹配的文件,这里不再解释,这里只是列出常用的方法。//查找某个文件并不输出错误 find / -name "GetInfo*" 2> /dev/null2 使用which查找which的功能没有那么强大,不过寻找可执行文件时是非常快速的。查找某个文件的路径which wsdl2h soapcpp2结果:/usr/local/bin/wsdl2h/usr/local/bin/soa原创 2021-03-31 10:18:05 · 462 阅读 · 0 评论 -
07-----关于ffmpeg Invalid data found when processing input错误
1 关于ffmpeg Invalid data found when processing input错误百度有人说是库的原因,需要重新编译。但我没有,我等一下就好了。非常的奇怪,等一下自动好了。。。不知道是什么原因,所以没有去深究。如果等一下不行,建议重启开发的软件或者电脑。......原创 2021-03-31 09:54:52 · 15403 阅读 · 2 评论 -
06-----查看Linux内核版本和系统版本的命令
1 查看Linux内核版本1)cat /proc/version;2)uname -a结果,可以看到Linux内核版本和gcc版本等信息。2 查看Linux系统版本的命令(3种方法)1)lsb_release -a//这个命令适用于所有的Linux发行版,包括RedHat、SUSE、Debian…等发行版。我此命令没安装,大家安装一下即可。2)cat /etc/redhat-release//这种方法只适合Redhat系的Linux,例如ubuntu和centos。3)原创 2021-03-31 09:49:50 · 1893 阅读 · 0 评论 -
05-----检测某个端口是否开放和查看服务器防火墙状态
1 检测某个端口是否开放nc -vv 192.168.1.117 8890结果:2 查看服务器防火墙状态service firewalld status或者使用下面的命令查看防火墙状态,主要看系统。systemctl status firewalld.service //该命令可以改成start,stop使用,去启动或者停止防火墙服务。下面这条我没这个命令。firewall-cmd --state//状态...原创 2021-03-31 09:24:43 · 1611 阅读 · 0 评论 -
04-----内存检测工具valgrind的下载
1 内存检测工具的下载1)下载安装包wget http://www.valgrind.org/downloads/valgrind-3.8.1.tar.bz2 //网址可以适当换掉2)解压tar xvf valgrind-3.8.1.tar.bz2cd valgrind-3.8.13)执行配置文件和安装./configure --prefix=/usr/local/webserver/valgrindmakemake install2 简单的执行语句命令示例valgrind --原创 2021-03-31 09:10:59 · 626 阅读 · 0 评论 -
03-----生产环境 CPU 占用过高,你如何解决?
1. top指令top //找出占用 CPU 最高的进程的 pid。2. 查看耗CPU的线程号方法1:top -Hp 进程号。然后按下大写P。//在该进程中找到,哪些线程占用的 CPU 最高的线程,记录下 tid。注意下图一个是主线程,其余是子线程。方法2:ps -ef | grep 程序名 | grep -v grep //获取具体的进程信息,第二行和top的进程名不一样?一个是主线程一个是进程??但是都代表同一个东西啊ps -mp 上面ef的进程id即第二列 -o THREAD,原创 2021-03-30 18:35:53 · 1020 阅读 · 1 评论 -
02-----libevent下载或者移植环境时报错(/usr/bin/ld: warning:xxx,needed by xxx,not found)
这个问题/bin/sh:xx(命令) not found是非常常见的,更具体可以是下图的情况,两者是一样的。1 我第一次遇到这种情况时,发现是库版本不对,所以将这些动态库换一篇后解决。ln -s /usr/local/lib/libevent_core-2.1.so.7 /usr/lib64/libevent_core-2.1.so.7 //ln -s 源文件 目标文件。即将local下的源文件生成lib64的目标文件。//剩余的libevent的库同理。共5个库替换完毕。ln -s /usr/原创 2021-03-30 17:50:31 · 2171 阅读 · 0 评论 -
01-----gdb调试段错误
一 gdb调试段错误我们在linux开发时,经常遇到段错误,发生这种情况一般是因为访问了非法的内存地址,例如数组越界;使用未开辟内存的指针,例如int *p;if(p==NULL){ xxx;//必定报错,因为p并未开辟内存}这些都会出现段错误的问题。那么,我们遇到段错误时如何精确找到出问题的行号?1 方法1ulimit -a //先查看core file size的大小,一般为0ulimit -c unlimited //修改大小为无限制./mytest //执行原创 2021-03-30 16:36:11 · 3191 阅读 · 1 评论
分享