标签: strace

试图理解strace输出

我试图了解strace.

所以我认为一个非常实际的方法是做以下事情:

strace ``echo "1"'' > echo1.txt

strace ``echo "2"'' > echo2.txt
Run Code Online (Sandbox Code Playgroud)

然后:

diff echo1.txt echo2.txt
Run Code Online (Sandbox Code Playgroud)

从那里开始.我的想法是,如果我能看出输出的差异,我可以推断出很多strace告诉我的东西.

不幸的是,echo1.txt和echo2.txt只包含echo的输出,而不是strace.我可以手动复制/粘贴输出,然后运行差异,但现在我只是好奇我做错了什么.

有人可以帮忙吗?

unix redirect strace

1
推荐指数
1
解决办法
689
查看次数

wget的strace给出了奇怪的套接字调用

"strace wget grooveshark.com"停止了奇怪的套接字调用,错误的字符串长度,我必须按Ctrl + C终止.

write(2, "Connecting to grooveshark.com (g"..., 67Connecting to grooveshark.com (grooveshark.com)|8.20.213.76|:80... ) = 67
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("8.20.213.76")}, 16) = 0
write(2, "connected.\n", 11connected.
)            = 11
select(4, NULL, [3], NULL, {900, 0})    = 1 (out [3], left {899, 999993})
write(3, "GET / HTTP/1.1\r\nUser-Agent: Wget"..., 115) = 115
write(2, "HTTP request sent, awaiting resp"..., 40HTTP request sent, awaiting response... ) = 40 [[ Check this line ]]
select(4, [3], NULL, NULL, {900, …
Run Code Online (Sandbox Code Playgroud)

sockets linux ubuntu wget strace

1
推荐指数
1
解决办法
1440
查看次数

grep on strace只与stderr一起工作到stdout

当我做:

sudo strace -p PID 2>&1 | grep -v "recvmsg"
Run Code Online (Sandbox Code Playgroud)

grep匹配它应该匹配的行,但是当我这样做时:

sudo strace -p PID|grep -v "recvmsg"
Run Code Online (Sandbox Code Playgroud)

它仍然显示所有呼叫.这是为什么?

linux bash grep pipe strace

1
推荐指数
1
解决办法
3464
查看次数

strace'ing sqoop 命令时资源暂时不可用 futex

我有一个 sqoop 命令,它使用 hcatalog 参数将数据从 Oracle 导入到 hive orc 表中。

sqoop import -D oraoop.disabled=true -D mapred.child.java.opts="\-Djava.security.egd=file:/dev/../dev/urandom" --connect 'jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dbs-dev-v.com)(PORT=1533))(CONNECT_DATA=(SERVICE_NAME=SDADCOM)(Server=Dedicated)))' --username phani --password pass --query "select ITEM_ID,ROLLUP_ITEM_ID,CPI_FORMAT1,CPI_FORMAT2,CPI_FORMAT3,CA_SNO_VALID_CNTRL,CUSTOM_SERIAL_FLAG,INVENTORY_ITEM_STATUS_CODE,LAST_DOS,ESN_CAPABILITY,ROLLUP_FLAG,PRODUCT_FAMILY,PRODUCT_SUB_GROUP,ERP_ITEM_TYPE,MFG_PRODUCT_CONFIG,MFG_SERIAL_FLAG,CA_CONFIG_VALID_CNTRL,CA_INS_VALID_CNTRL,ENABLED_FLAG,CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE,IB_PRODUCT_TYPE,USER_ITEM_TYPE,ITEM_CREATION_DATE,BASE_PRODUCT_ID,PRD_CATEGORY,TECHNOLOGY_GROUP,BUSINESS_UNIT,CA_DUPL_VALID_CNTRL,SKU_LIST_PRICE,SERV_FEE_VALUE_DOLLAR_AMT,MAX_SERIALIZED_CHILD,PHYSICAL_SN_LOCATION,CPI_LINK,TOTAL_INSTANCES,TOTAL_INSTANCES_ON_CONTRACT,GP_EXCLUSION,LAST_DOA,LAST_DOR from XXCCS_SCDC_PRODUCT_PROFILE where \$CONDITIONS" --split-by ITEM_ID  --incremental lastmodified --check-column ITEM_ID -m 4 --hcatalog-home /opt/mapr/hive/hive-1.2/hcatalog --hcatalog-database installbase --hcatalog-table XXCCS_SCDC_PRODUCT_PROFILE --null-string '\\N'  --null-non-string '\\N' --boundary-query 'select (select min(ITEM_ID) from XXCCS_SCDC_PRODUCT_PROFILE) as minid ,(select max(ITEM_ID) from XXCCS_SCDC_PRODUCT_PROFILE) as maxid from dual' --hcatalog-storage-stanza 'stored as orc' --verbose
Run Code Online (Sandbox Code Playgroud)

在执行命令时,我收到以下异常

16/10/06 04:26:20 ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.NullPointerException
java.lang.NullPointerException
        at …
Run Code Online (Sandbox Code Playgroud)

hadoop strace sqoop

1
推荐指数
1
解决办法
9222
查看次数

pthread_mutex_lock 和 EAGAIN

我已经将 pthread 用于多线程程序,并且遇到以下情况。当我在没有 sleep 命令的情况下运行代码时,它会在运行时导致错误,而当我添加 sleep 命令时,程序会按预期运行。

有睡眠:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <pthread.h>
#include <unistd.h>



pthread_mutex_t m_writer = PTHREAD_MUTEX_INITIALIZER;

void *print_str(void *args) {
  sleep(12);
  char *str = (char*) args;
  pthread_mutex_lock(&m_writer);
  printf("%s", str);
  pthread_mutex_unlock(&m_writer);
  pthread_exit(NULL);
}

int main(int argc, char **argv) {
  pthread_t t1;
  pthread_create(&t1, NULL, print_str, "Hello\n");
  pthread_mutex_lock(&m_writer);
  printf("LOL\n");
  pthread_mutex_unlock(&m_writer);
  pthread_join(t1, NULL);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

不睡觉:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <pthread.h>
#include <unistd.h>



pthread_mutex_t m_writer = PTHREAD_MUTEX_INITIALIZER;

void *print_str(void *args) {
  char *str = …
Run Code Online (Sandbox Code Playgroud)

c multithreading pthreads strace futex

1
推荐指数
1
解决办法
1075
查看次数

linux读取由strace产生的系统调用-如何理解指向缓冲区值的指针?

我跑了strace,在它的输出中,我得到了如下行:

read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\273\0\0\0\0\0\0"..., 832) = 832
Run Code Online (Sandbox Code Playgroud)

我已经在读的人,所以字符串""是指向的buf( ssize_t read(int fd, void *buf, size_t count);),但是那又有什么特定的字符串是什么意思?特别是:

  • ELF 最有可能与可执行程序链接-为什么在这里输入指针?
  • \ 让我们转义特殊字符-为什么在这里转义数字?
  • > 这是为了什么?

c pointers file-descriptor strace

1
推荐指数
1
解决办法
55
查看次数

在终端中输入“strace ls”时,为什么我无法在 strace 输出中查看 clone() 系统调用?

我的理解是,当我们ls在终端输入:

  1. 它调用fork()库函数,库函数调用系统调用clone() 来创建子进程。
  2. 然后调用系统execve()调用以用新内容替换创建的新进程的地址空间。

在这种情况下,我希望在ls 输出clone()中看到系统调用。但我只看到而不看到。execve()straceexecve()clone()

可能是什么原因?

我尝试了以下命令:

strace ls
strace -c ls
strace -f ls 
Run Code Online (Sandbox Code Playgroud)

操作系统-红帽

linux ls system-calls linux-kernel strace

1
推荐指数
1
解决办法
969
查看次数

C中的Setbuf函数

计划1:

    #include<stdio.h>
    void main()
    {
        printf("Hello\n");
    }
Run Code Online (Sandbox Code Playgroud)

输出:

    $strace ./a.out
    ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
    fstat64(0, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 3), ...}) = 0
    .
    .
    .
    .
    write(1, "Hello\n", 6Hello
    )                  = 6
    exit_group(6)                           = ?
    $
Run Code Online (Sandbox Code Playgroud)

计划2:

    #include<stdio.h>
    void main()
    {
        char buf[2];
        setbuf(stdout,buf);
        printf("Hello\n");
    }
Run Code Online (Sandbox Code Playgroud)

输出:

    $ strace ./a.out 
    ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
    fstat64(0, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 3), ...}) = 0
    .
    .
    .
    . …
Run Code Online (Sandbox Code Playgroud)

c unix linux system-calls strace

0
推荐指数
1
解决办法
554
查看次数

重新编码 Strace,为什么我无法捕捉到“写入系统调用”?

我目前正在重新编码 Strace 命令。

我了解此命令的目标,并且可以从可执行文件中捕获一些系统调用。

我的问题是:为什么我没有赶上“写”系统调用?

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ptrace.h>
#include <sys/user.h>
#include <wait.h>

int main(int argc, char* argv[]) {
   int status;
   pid_t pid;
   struct user_regs_struct regs;
   int counter = 0;
   int in_call =0;

   switch(pid = fork()) {
      case -1:
         perror("fork");
         exit(1);
      case 0:
         ptrace(PTRACE_TRACEME, 0, NULL, NULL);
         execvp(argv[1], argv + 1);
         break;
      default:
         wait(&status);
         while (status == 1407) {
             ptrace(PTRACE_GETREGS, pid, NULL, &regs);
             if(!in_call) {
                  printf("SystemCall %lld called with %lld, %lld,     %lld\n",regs.orig_rax, 
                       regs.rbx, regs.rcx, regs.rdx); …
Run Code Online (Sandbox Code Playgroud)

c system-calls strace

0
推荐指数
1
解决办法
71
查看次数