当前位置: 首页 > news >正文

linux strace 查看程序异常问题总结

1,死锁问题

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>pthread_mutex_t lock1 = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t lock2 = PTHREAD_MUTEX_INITIALIZER;void* thread_func1(void* arg) {pthread_mutex_lock(&lock1);printf("Thread pid[%lx]: Locked lock1\n",pthread_self());sleep(1); // 模拟一些工作pthread_mutex_lock(&lock2);printf("Thread 1 pid[%lx]: Locked lock2\n",pthread_self());pthread_mutex_unlock(&lock2);pthread_mutex_unlock(&lock1);return NULL;
}void* thread_func2(void* arg) {pthread_mutex_lock(&lock2);printf("Thread pid[%lx]: Locked lock2\n",pthread_self());sleep(1); // 模拟一些工作pthread_mutex_lock(&lock1);printf("Thread pid[%lx]: Locked lock1\n",pthread_self());pthread_mutex_unlock(&lock1);pthread_mutex_unlock(&lock2);return NULL;
}int main() {pthread_t t1, t2;pthread_create(&t1, NULL, thread_func1, NULL);pthread_create(&t2, NULL, thread_func2, NULL);pthread_join(t1, NULL);pthread_join(t2, NULL);pthread_mutex_destroy(&lock1);pthread_mutex_destroy(&lock2);return 0;
}

运行

lark@ubuntu:~/test$ ./pthread1

Thread pid[7fc61fba2700]: Locked lock2
Thread pid[7fc6203a3700]: Locked lock1

lark@ubuntu:~$ ps -axf | grep pthread1
   2769 pts/0    Sl+    0:00  |           \_ ./pthread1
   2835 pts/2    S+     0:00              \_ grep --color=auto pthread1 

lark@ubuntu:~$ sudo strace -p 2769
[sudo] password for lark: 
strace: Process 2769 attached
futex(0x7fc6203a39d0, FUTEX_WAIT, 2770, NULL

可以看到是锁在等待。 

2,文件操作失败:

#include<stdio.h>
#include<unistd.h>
#include <string.h>
#include<errno.h>#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main()
{#if 0int fd = open("/etc/shadow",O_RDONLY);if(fd < 0){printf("fd[%d], errno[%d]\r\n", fd,errno);return -1;}#endifFILE* fp = fopen("/etc/shadow","r");if(NULL == fp){printf("errno[%s]\r\n",strerror(errno));return -1;}	return 0;
}

lark@ubuntu:~/test$ gcc strace.c 
lark@ubuntu:~/test$ strace ./a.out 
execve("./a.out", ["./a.out"], 0x7ffdc7708a50 /* 25 vars */) = 0
brk(NULL)                               = 0x559038b11000
arch_prctl(0x3001 /* ARCH_??? */, 0x7ffe2657c8f0) = -1 EINVAL (Invalid argument)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=86377, ...}) = 0
mmap(NULL, 86377, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f6ac1965000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300A\2\0\0\0\0\0"..., 832) = 832
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32
pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\7\2C\n\357_\243\335\2449\206V>\237\374\304"..., 68, 880) = 68
fstat(3, {st_mode=S_IFREG|0755, st_size=2029592, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6ac1963000
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32
pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\7\2C\n\357_\243\335\2449\206V>\237\374\304"..., 68, 880) = 68
mmap(NULL, 2037344, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f6ac1771000
mmap(0x7f6ac1793000, 1540096, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f6ac1793000
mmap(0x7f6ac190b000, 319488, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19a000) = 0x7f6ac190b000
mmap(0x7f6ac1959000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) = 0x7f6ac1959000
mmap(0x7f6ac195f000, 13920, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f6ac195f000
close(3)                                = 0
arch_prctl(ARCH_SET_FS, 0x7f6ac1964540) = 0
mprotect(0x7f6ac1959000, 16384, PROT_READ) = 0
mprotect(0x55903745a000, 4096, PROT_READ) = 0
mprotect(0x7f6ac19a8000, 4096, PROT_READ) = 0
munmap(0x7f6ac1965000, 86377)           = 0
brk(NULL)                               = 0x559038b11000
brk(0x559038b32000)                     = 0x559038b32000
openat(AT_FDCWD, "/etc/shadow", O_RDONLY) = -1 EACCES (Permission denied)
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x1), ...}) = 0
write(1, "errno[Permission denied]\r\n", 26errno[Permission denied]
) = 26
exit_group(-1)                          = ?
+++ exited with 255 +++ 

  可以看到openat函数异常退出-1,原因为Permission denied。

相关文章:

linux strace 查看程序异常问题总结

1&#xff0c;死锁问题 #include <stdio.h> #include <pthread.h> #include <unistd.h>pthread_mutex_t lock1 PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t lock2 PTHREAD_MUTEX_INITIALIZER;void* thread_func1(void* arg) {pthread_mutex_lock(&lo…...

8086汇编常见寄存器与指令

本文为学习书籍《汇编语言(第4版)》后的小结。 1、寄存器 序号寄存器描述1ax运算寄存器2bx地址寄存器&#xff0c;偏移地址3cx计数寄存器&#xff0c;loop的结束条件&#xff0c;jcxz的跳转条件4dx运算寄存器5cs段地址&#xff0c;指令执行段地址6ss段地址&#xff0c;栈的段地…...

Group By、Having用法总结(常见踩雷点总结—SQL)

Group By、Having用法总结 目录 Group By、Having用法总结一、 GROUP BY 用法二、 HAVING 用法三、 GROUP BY 和 HAVING 的常见踩雷点3.1 GROUP BY 选择的列必须出现在 SELECT 中&#xff08;&#x1f923;最重要的一点&#xff09;3.2 HAVING 与 WHERE 的区别3.3 GROUP BY 可以…...

Redis持久化机制——针对实习面试

目录 Redis持久化机制Redis为什么要有持久化机制&#xff1f;Redis持久化方式有哪些&#xff1f;AOF持久化工作原理是什么&#xff1f;有什么优缺点&#xff1f;AOF持久化工作原理AOF的优点AOF的缺点 RDB持久化工作原理是什么&#xff1f;有什么优缺点&#xff1f;RDB持久化工作…...

Windows系统服务器怎么设置远程连接?详细步骤

一、什么是Windows远程桌面连接? Windows远程桌面(Remote Desktop)功能使用户能够通过网络连接到另一台Windows计算机&#xff0c;实现远程操作。远程桌面非常适合系统管理员、技术支持人员以及那些需要远程工作的人&#xff0c;它允许用户以图形界面的方式访问远程计算机&…...

【Rust设计模式之建造者模式】

Rust设计模式之建造者模式 什么是建造者模式 什么是建造者模式 即将结构体属性方法与构建解离&#xff0c;使用专门的builder进行建造&#xff0c;说白了就是new和其他的方法分开&#xff0c;集中处理更方便。 直接上代码&#xff1a; #[derive(Debug)] struct children {nam…...

2024中国移动(南京)智算大会暨人工智能产业大会即将盛大启幕

11月9日&#xff0c;2024中国移动&#xff08;南京&#xff09;智算大会暨人工智能产业大会将在南京国际博览中心盛大举行。此次盛会将汇聚政界、学界与商界的顶尖力量&#xff0c;共同探讨智能计算与人工智能的未来发展方向&#xff0c;为智能计算与人工智能产业的发展注入新的…...

计算机毕业设计 | SpringBoot咖啡商城 购物采买平台 后台管理软件(附源码)

1&#xff0c;项目背景 1.1 当前的问题和困惑 系统稳定性&#xff1a; 在高并发访问时&#xff0c;商城系统容易出现卡顿、崩溃等问题&#xff0c;影响了用户体验和销售额。支付安全性&#xff1a; 支付环节存在潜在的安全隐患&#xff0c;如何确保支付过程的安全性和用户资金…...

CosyVoice文本转语音:轻松创造个性化音频

CosyVoice文本转语音&#xff1a;轻松创造个性化音频" 要实现一个使用通义语音合成模型CosyVoice将文字转换为音频的图形界面应用&#xff0c;可以使用Python的tkinter库来创建图形用户界面&#xff08;GUI&#xff09;&#xff0c;并使用requests库来调用CosyVoice的API…...

法语nous sommes

法语短语 “nous sommes” 的词源可以追溯到拉丁语&#xff0c;具体分析如下&#xff1a; 1. “Nous” 的词源&#xff1a; “Nous” 是法语中表示 “我们” 的人称代词&#xff0c;源自拉丁语的 “nos”&#xff0c;它表示 “我们” 的意思。 拉丁语 “nos” 是第一人称复数…...

《化学进展》

《化学进展》主要栏目有&#xff1a;综述&#xff0c;评论&#xff0c;中国化学印记&#xff0c;Mini Accounts等。本刊可供化学及相关学科领域的科研、教学、决策管理人员及研究生阅读。 《化学进展》投稿指南稿件要求   &#xff08;1&#xff09;本刊仅接受综述与评论性的…...

CNN和RCNN的关系和区别

RCNN&#xff08;Region-based Convolutional Neural Network&#xff09;和 CNN&#xff08;Convolutional Neural Network&#xff09;是两种不同的神经网络架构&#xff0c;它们在应用和结构上有所不同。以下是它们之间的主要区别&#xff1a; 1. 基本概念 CNN&#xff08;…...

Chromium 进程降权和提权模拟示例c++

一、背景知识概念参考微软链接&#xff1a; 强制完整性控制 - Win32 应用程序 |Microsoft 学习 授权) (模拟级别 - Win32 apps | Microsoft Learn DuplicateTokenEx 函数 (securitybaseapi.h) - Win32 apps | Microsoft Learn 本文主要演示 low, medium, high, and system 四…...

【测试语言篇一】Python进阶篇:内置容器数据类型

一、列表 列表&#xff08;List&#xff09;是一种有序且可变的容器数据类型。 与集合&#xff08;Set&#xff09;不同&#xff0c;列表允许重复的元素。 它方便保存数据序列并对其进行进一步迭代。 列表用方括号创建。 my_list ["banana", "cherry", …...

湘潭大学软件工程专业选修 SOA 期末考试复习(二)

文章目录 回顾序言第一章课后题填空选择简答 第二章课后题填空选择编程 计划第三章课后题填空选择简答编程 第四章课后题填空选择简答编程 第五章课后题填空选择简答编程 第六章课后题说明 第七章课后题填空选择简答编程 第八章课后题填空选择简答编程 第九章课后题填空选择简答…...

改进的正弦余弦算法复现

本文所涉及所有资源均在 传知代码平台 可获取。 目录 一、背景及意义 (一)背包问题背景...

Day13杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> res new Arra…...

【c知道】Hadoop工作原理。

请解释一下Hadoop中MapReduce的工作原理&#xff0c;并说明如何进行MapReduce程序的编写和调试。 Hadoop MapReduce是一种分布式计算模型&#xff0c;它将大规模的数据处理任务分解成一系列小的、独立的任务&#xff08;Map任务&#xff09;和后续的聚合任务&#xff08;Reduce…...

React.lazy() 懒加载

概要 React.lazy() 是 React 16.6 引入的一个功能&#xff0c;用于实现代码分割&#xff08;code splitting&#xff09;。它允许你懒加载组件&#xff0c;即在需要时才加载组件&#xff0c;而不是在应用初始加载时就加载所有组件。这种方法可以显著提高应用的性能&#xff0c…...

【自学笔记】神经网络(1)

文章目录 介绍模型结构层&#xff08;Layer&#xff09;神经元 前向传播反向传播Q1: 为什么要用向量Q2: 不用激活函数会发生什么 介绍 我们已经学习了简单的分类任务和回归任务&#xff0c;也认识了逻辑回归和正则化等技巧&#xff0c;已经可以搭建一个简单的神经网络模型了。 …...

2.4.快速排序——先分区再递归,为什么它平均这么快却可能退化?

2.4.快速排序——先分区再递归&#xff0c;为什么它平均这么快却可能退化&#xff1f; 系列&#xff1a;搜索与排序 | 第 4 篇&#xff0c;共 16 篇 难度&#xff1a;⭐⭐⭐☆☆ 中等 标签&#xff1a;排序 快速排序 分治 随机化 三路快排 上一篇&#xff1a;2.3.插入排序——像…...

30美元实现AI视觉革命:OpenGlass开源智能眼镜的平民化方案

30美元实现AI视觉革命&#xff1a;OpenGlass开源智能眼镜的平民化方案 【免费下载链接】OpenGlass Turn any glasses into AI-powered smart glasses 项目地址: https://gitcode.com/GitHub_Trending/op/OpenGlass 当商业智能眼镜以数千元价格将普通用户拒之门外时&…...

5个维度教你掌握游戏自动化与效率工具开发

5个维度教你掌握游戏自动化与效率工具开发 【免费下载链接】JX3Toy 一个自动化测试DPS的小工具 项目地址: https://gitcode.com/GitHub_Trending/jx/JX3Toy 在游戏开发与玩家体验优化领域&#xff0c;游戏脚本开发正成为提升效率的关键技术。本文将系统介绍一款开源项目…...

MacOS 在Trae IDE中解锁现代C++开发:从零配置到智能编码的进阶指南

1. 为什么选择Trae IDE进行现代C开发 作为一个长期使用Visual Studio和CLion的老C程序员&#xff0c;我第一次接触Trae IDE时就被它的AI特性惊艳到了。这不仅仅是一个代码编辑器&#xff0c;更像是一个懂你编程思维的智能助手。在MacOS环境下&#xff0c;Trae基于VSCode技术构…...

图卷积神经网络安全最佳实践:7大关键漏洞防范与代码审计终极指南 [特殊字符]️

图卷积神经网络安全最佳实践&#xff1a;7大关键漏洞防范与代码审计终极指南 &#x1f6e1;️ 【免费下载链接】pygcn Graph Convolutional Networks in PyTorch 项目地址: https://gitcode.com/gh_mirrors/py/pygcn 图卷积神经网络&#xff08;GCN&#xff09;作为处理…...

Codesys软运动控制进阶:用SMC_FreeEncoder为ECAT轴搭建一个“虚拟手轮”调试工具

Codesys软运动控制进阶&#xff1a;用SMC_FreeEncoder为ECAT轴搭建虚拟手轮调试工具 在自动化设备开发周期中&#xff0c;机械安装与电气调试往往存在时间差。当机械部件尚未就位或伺服驱动器临时故障时&#xff0c;如何提前验证运动控制逻辑&#xff1f;传统做法是等待硬件就绪…...

3个技巧让Sketch设计稿命名效率提升300%:Rename It插件终极指南

3个技巧让Sketch设计稿命名效率提升300%&#xff1a;Rename It插件终极指南 【免费下载链接】RenameIt Keep your Sketch files organized, batch rename layers and artboards. 项目地址: https://gitcode.com/gh_mirrors/re/RenameIt 想象一下这个场景&#xff1a;你刚…...

用STC32G的HSPWM做个数控电源:从BUCK电路到PID调参,我的DIY踩坑全记录

从零打造STC32G数控电源&#xff1a;我的BUCK电路实战与PID调参血泪史 作为一个常年泡在电子实验室的硬件爱好者&#xff0c;开关电源一直是我又爱又恨的领域。去年冬天&#xff0c;当我第N次烧毁某宝买的降压模块后&#xff0c;终于下定决心自己打造一台高精度数控电源。这次…...

Jetson Orin Nano环境搭建避坑实录:从JetPack到PyQt5,我踩过的那些‘坑’都帮你填平了

Jetson Orin Nano环境搭建避坑实录&#xff1a;从JetPack到PyQt5的实战指南 第一次拿到Jetson Orin Nano这块开发板时&#xff0c;我天真地以为按照官方文档就能轻松搞定所有环境配置。结果从JetPack安装到PyQt5编译&#xff0c;几乎每一步都遇到了意想不到的问题。这篇文章不会…...

AI辅助开发:让快马智能生成代码优化50台云桌面的动态资源调度策略

今天想和大家分享一个特别实用的技术实践——如何用AI辅助开发来优化云桌面的资源调度。最近在做一个项目&#xff0c;需要在一台主机上运行50台云桌面&#xff0c;这对资源调度提出了很高的要求。传统的静态分配方式显然不够灵活&#xff0c;于是我开始探索AI辅助开发的解决方…...