strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。
示例:
# strace cat /dev/null
execve("/bin/cat", ["cat", "/dev/null"], [/* 22 vars */]) = 0
brk(0) = 0xab1000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29379a7000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
...
每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。 strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。
跟踪可执行程序
strace -f -o straceout.txt myserver
strace -o output.txt -T -tt -e trace=all -p 54974
-f 选项告诉strace同时跟踪fork出来的进程,-o选项把所有strace输出写到straceout.txt里 面,myserver是要启动和调试的程序。
跟踪服务程序
strace -o output.txt -T -tt -e trace=all ./udp_client 127.0.0.1 8899
跟踪udp_client进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面
00:18:57.217205 execve("./udp_client", ["./udp_client", "127.0.0.1", "8899"], 0x7ffd71475ba0 /* 29 vars */) = 0 <0.000190>
00:18:57.217636 brk(NULL) = 0x16e3000 <0.000021>
00:18:57.217741 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f35eccbe000 <0.000021>
00:18:57.217822 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) <0.000022>
00:18:57.217967 open("/apps/sylar/lib/tls/x86_64/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000020>
00:18:57.218038 stat("/apps/sylar/lib/tls/x86_64", 0x7ffc08d07e50) = -1 ENOENT (No such file or directory) <0.000019>
00:18:57.218102 open("/apps/sylar/lib/tls/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000020>
00:18:57.218158 stat("/apps/sylar/lib/tls", 0x7ffc08d07e50) = -1 ENOENT (No such file or directory) <0.000019>
00:18:57.218213 open("/apps/sylar/lib/x86_64/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000019>
00:18:57.218269 stat("/apps/sylar/lib/x86_64", 0x7ffc08d07e50) = -1 ENOENT (No such file or directory) <0.000019>
00:18:57.218391 open("/apps/sylar/lib/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000023>
00:18:57.218458 stat("/apps/sylar/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 <0.000019>
00:18:57.218524 open("/apps/sylar/lib64/tls/x86_64/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000020>
00:18:57.218582 stat("/apps/sylar/lib64/tls/x86_64", 0x7ffc08d07e50) = -1 ENOENT (No such file or directory) <0.000025>
00:18:57.218643 open("/apps/sylar/lib64/tls/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000019>
00:18:57.218701 stat("/apps/sylar/lib64/tls", 0x7ffc08d07e50) = -1 ENOENT (No such file or directory) <0.000021>
00:18:57.218759 open("/apps/sylar/lib64/x86_64/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000020>
00:18:57.218816 stat("/apps/sylar/lib64/x86_64", 0x7ffc08d07e50) = -1 ENOENT (No such file or directory) <0.000019>
00:18:57.218872 open("/apps/sylar/lib64/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = 3 <0.000022>
00:18:57.218929 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\276\t\0\0\0\0\0"..., 832) = 832 <0.000019>
00:18:57.218989 fstat(3, {st_mode=S_IFREG|0755, st_size=14609776, ...}) = 0 <0.000018>
00:18:57.219047 mmap(NULL, 4217152, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f35ec698000 <0.000021>
00:18:57.219104 mprotect(0x7f35ec88e000, 2093056, PROT_NONE) = 0 <0.000021>
00:18:57.219173 mmap(0x7f35eca8d000, 57344, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1f5000) = 0x7f35eca8d000 <0.000031>
00:18:57.219265 mmap(0x7f35eca9b000, 10560, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f35eca9b000 <0.000018>
00:18:57.219323 close(3) = 0 <0.000028>
00:18:57.219391 open("/apps/sylar/lib/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000020>
00:18:57.219452 open("/apps/sylar/lib64/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000018>
00:18:57.219504 open("tls/x86_64/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000017>
00:18:57.219555 open("tls/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000017>
00:18:57.219606 open("x86_64/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000017>
00:18:57.219657 open("libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000017>
00:18:57.219710 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 <0.000019>
00:18:57.219768 fstat(3, {st_mode=S_IFREG|0644, st_size=39315, ...}) = 0 <0.000016>
00:18:57.219819 mmap(NULL, 39315, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f35eccb4000 <0.000018>
00:18:57.219868 close(3) = 0 <0.000016>
00:18:57.219923 open("/lib64/libm.so.6", O_RDONLY|O_CLOEXEC) = 3 <0.000021>
00:18:57.219976 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0PS\0\0\0\0\0\0"..., 832) = 832 <0.000017>
00:18:57.220032 fstat(3, {st_mode=S_IFREG|0755, st_size=1136944, ...}) = 0 <0.000016>
00:18:57.220082 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f35eccb3000 <0.000017>
00:18:57.220134 mmap(NULL, 3150136, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f35ec396000 <0.000019>
00:18:57.220183 mprotect(0x7f35ec497000, 2093056, PROT_NONE) = 0 <0.000021>
00:18:57.220235 mmap(0x7f35ec696000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x100000) = 0x7f35ec696000 <0.000020>
00:18:57.220293 close(3) = 0 <0.000016>
00:18:57.220354 open("/apps/sylar/lib/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000019>
00:18:57.220412 open("/apps/sylar/lib64/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3 <0.000018>
00:18:57.220464 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0+\0\0\0\0\0\0"..., 832) = 832 <0.000018>
00:18:57.220516 fstat(3, {st_mode=S_IFREG|0644, st_size=427712, ...}) = 0 <0.000019>
00:18:57.220575 mmap(NULL, 2192456, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f35ec17e000 <0.000021>
00:18:57.220637 mprotect(0x7f35ec195000, 2093056, PROT_NONE) = 0 <0.000023>
00:18:57.220697 mmap(0x7f35ec394000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0x7f35ec394000 <0.000027>
00:18:57.220773 close(3) = 0 <0.000019>
00:18:57.220838 open("/apps/sylar/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000025>
00:18:57.220913 open("/apps/sylar/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000023>
00:18:57.220981 open("tls/x86_64/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000022>
00:18:57.221046 open("tls/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000020>
00:18:57.221108 open("x86_64/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000019>
00:18:57.221170 open("libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000021>
00:18:57.221238 open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 <0.000024>
00:18:57.221304 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`&\2\0\0\0\0\0"..., 832) = 832 <0.000030>
00:18:57.221379 fstat(3, {st_mode=S_IFREG|0755, st_size=2156592, ...}) = 0 <0.000021>
00:18:57.221443 mmap(NULL, 3985920, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f35ebdb0000 <0.000022>
00:18:57.221510 mprotect(0x7f35ebf74000, 2093056, PROT_NONE) = 0 <0.000026>
00:18:57.221576 mmap(0x7f35ec173000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c3000) = 0x7f35ec173000 <0.000024>
00:18:57.221645 mmap(0x7f35ec179000, 16896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f35ec179000 <0.000021>
00:18:57.221722 close(3) = 0 <0.000019>
00:18:57.221791 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f35eccb2000 <0.000020>
00:18:57.221877 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f35eccb0000 <0.000020>
00:18:57.221965 arch_prctl(ARCH_SET_FS, 0x7f35eccb0740) = 0 <0.000018>
00:18:57.222312 access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory) <0.000030>
00:18:57.222497 access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory) <0.000024>
00:18:57.222579 mprotect(0x7f35ec173000, 16384, PROT_READ) = 0 <0.000031>
00:18:57.222677 mprotect(0x7f35ec394000, 4096, PROT_READ) = 0 <0.000023>
00:18:57.222795 mprotect(0x7f35ec696000, 4096, PROT_READ) = 0 <0.000023>
00:18:57.223631 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f35eccaf000 <0.000022>
00:18:57.223795 mprotect(0x7f35eca8d000, 45056, PROT_READ) = 0 <0.000020>
00:18:57.223852 mprotect(0x600000, 4096, PROT_READ) = 0 <0.000022>
00:18:57.223914 mprotect(0x7f35eccbf000, 4096, PROT_READ) = 0 <0.000019>
00:18:57.223965 munmap(0x7f35eccb4000, 39315) = 0 <0.000022>
00:18:57.224122 brk(NULL) = 0x16e3000 <0.000017>
00:18:57.224175 brk(0x1715000) = 0x1715000 <0.000017>
00:18:57.224240 socket(AF_INET, SOCK_DGRAM, IPPROTO_IP) = 3 <0.000020>
00:18:57.224316 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0 <0.000039>
00:18:57.224401 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f35eccbd000 <0.000018>
00:18:57.224462 write(1, "sock:3\n", 7) = 7 <0.000024>
00:18:57.224541 write(1, "Please Enter# ", 14) = 14 <0.000020>
00:18:57.224597 read(0, "12345\n", 1023) = 6 <6.778551>
00:19:04.003241 sendto(3, "12345", 5, 0, {sa_family=AF_INET, sin_port=htons(8899), sin_addr=inet_addr("127.0.0.1")}, 16) = 5 <0.000057>
00:19:04.003411 recvfrom(3, "12345", 1023, 0, NULL, NULL) = 5 <0.000031>
00:19:04.003509 write(1, "server echo# 12345\n", 19) = 19 <0.000027>
00:19:04.003584 write(1, "Please Enter# ", 14) = 14 <0.000025>
00:19:04.003649 read(0, 0x7ffc08d09290, 1023) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) <6.710081>
00:19:10.713800 --- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} ---
➜ ~ strace -h
usage: strace [-CdffhiqrtttTvVwxxy] [-I n] [-e expr]...
[-a column] [-o file] [-s strsize] [-P path]...
-p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]
or: strace -c[dfw] [-I n] [-e expr]... [-O overhead] [-S sortby]
-p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]
-c
统计每一系统调用的所执行的时间,次数和出错的次数等。
示例:打印执行uptime时系统系统调用的时间、次数、出错次数和syscall
# strace -c uptime
-d
显示有关标准错误的strace本身的一些调试输出。
-f
跟踪子进程,这些子进程是由于fork(2)系统调用而由当前跟踪的进程创建的。
-i
在系统调用时打印指令指针。
-t
跟踪的每一行都以时间为前缀。
-tt
如果给出两次,则打印时间将包括微秒。
-ttt
如果给定三次,则打印时间将包括微秒,并且前导部分将打印为自该**以来的秒数。
-T
显示花费在系统调用上的时间。这将记录每个系统调用的开始和结束之间的时间差。
-v
打印环境,统计信息,termios等调用的未缩写版本。这些结构在调用中非常常见,因此默认行为显示了结构成员的合理子集。使用此选项可获取所有详细信息。
-V
打印strace的版本号。
-e expr
限定表达式,用于修改要跟踪的事件或如何跟踪它们:
-e trace=set
仅跟踪指定的系统调用集。该-c选项用于确定哪些系统调用可能是跟踪有用有用。例如,trace=open,close,read,write表示仅跟踪这四个系统调用。
-e trace=file
跟踪所有以文件名作为参数的系统调用。
示例:打印执行ls时跟文件有关的系统调用。
# strace -e trace=file ls
-e trace=process
跟踪涉及过程管理的所有系统调用。这对于观察进程的派生,等待和执行步骤很有用。
-e trace=network
跟踪所有与网络相关的系统调用。
-e trace=signal
跟踪所有与信号相关的系统调用。
-e trace=ipc
跟踪所有与IPC相关的系统调用。
-o 文件名
将跟踪输出写入文件名而不是stderr。
-p pid
使用进程ID pid附加到该进程并开始跟踪。跟踪可以随时通过键盘中断信号(CTRL -C)终止。
-S
按指定条件对-c选项打印的直方图输出进行排序。
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
我正在尝试上传文件。一个简单的hello.txt。我正在关注文档,但无法将其上传到我的存储桶。#STARTAWSCLIENTs3=Aws::S3::Resource.newbucket=s3.bucket(BUCKET_NAME)begins3.buckets[BUCKET_NAME].objects[KEY].write(:file=>FILE_NAME)puts"Uploadingfile#{FILE_NAME}tobucket#{BUCKET_NAME}."bucket.objects.eachdo|obj|puts"#{obj.key}=>#{obj.etag}"endresc
我有一个Highstock图表(带有标记和阴影的线条),并且想以编程方式显示一个highstock工具提示,例如,当我选择某个表上的一行(包含图表数据)我想显示相应的highstock工具提示。这可能吗? 最佳答案 股票图表thissolution不起作用:在thisexample你必须更换这个:chart.tooltip.refresh(chart.series[0].data[i]);为此:chart.tooltip.refresh([chart.series[0].points[i]]);解决方案可用here.
一、机器人介绍 此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接
我是syslog的新手。我们决定使用系统日志来跟踪Rails应用程序中的一些特殊事件。问题是我不想使用默认的/var/log/system.log文件,而是使用自定义文件,例如/var/log/myapp_events.log.我看到我必须像这样在/etc/syslog.conf中定义我自己的设施:myapp_events.*/var/log/myapp_events.log重新启动syslogd后,我发现我可以直接在bash控制台中使用它:syslog-s-kFacilitymyapp_eventsMessage"thisismymessage"该消息按预期出现在/var/log/m
目前我有一小套针对我的网络服务器运行的集成测试,它发出请求并断言一些关于响应应该是什么的假设。这些是用Ruby编写的,生成http请求。我一直在看Gatling作为压力测试工具,但我想知道它是否也可以用于集成测试。这样,所有端点请求都可以在压力测试和集成测试中重复使用。我可能在这里失去了一些东西,因为没有RSpec的BDD,但不必两次创建相同的测试。有没有人有这样使用gatling的经验? 最佳答案 您可以使用AssertionAPI并设置验收标准。但是,Gatling不是浏览器,不会运行/测试您的Javascript,因此这种方法