首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strace会阻止程序的正确执行吗?

strace会阻止程序的正确执行吗?
EN

Stack Overflow用户
提问于 2012-08-11 19:00:14
回答 2查看 995关注 0票数 2

我想知道strace是否会导致它正在跟踪的程序出现异常。目前,我正在尝试跟踪一个随机的分段错误(但当我使用strace时,程序似乎永远不会以这种方式崩溃),这是由我调用pthread_cond_wait()的一行引起的。

当我直接运行我的程序时-它实际上是c/c++的混合,它有时会像它应该的那样工作,但正如前面提到的,有时它在pthread_cond_wait()上崩溃(顺便说一句,如果有人想要帮助我解决这个问题,see here,任何帮助都会非常感谢)。

如果我直接运行我的程序并将strace附加到进程,如下所示:

代码语言:javascript
复制
strace -ttTD -o strace_today.txt -p PROCESS_ID

输出是一行代码,其中说它正在等待futex (有效地如下所示:)

代码语言:javascript
复制
futex(x,FUTEX_WAIT_PRIVATE,x)

如果我像这样从strace运行我的程序:

代码语言:javascript
复制
strace -ttTD -o strace_today.txt example_program

然后,在我的文件输出的某个点上,准确地说,当我调用pthread_cond_wait()时,它会继续发送垃圾邮件,像这样的多行(并且每次,futex()调用等待的值都比以前更高,这里是15)

代码语言:javascript
复制
12:46:15.636366 semop(11599962, {{0, -1, 0}}, 1) = 0 <0.000031>
12:46:15.636512 futex(0x8053838, FUTEX_WAKE_PRIVATE, 1) = 0 <0.000033>
12:46:15.636637 futex(0x8053864, FUTEX_WAIT_PRIVATE, 15, NULL) = ? ERESTARTSYS (To be restarted) <0.002034>
12:46:15.638832 futex(0x8053864, FUTEX_WAIT_PRIVATE, 15, NULL) = 0 <0.001449>
12:46:15.640436 clone(child_stack=0xb6cd0484, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0xb6cd0bd8, {entry_number:6, base_addr:0xb6cd0b70, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}, child_tidptr=0xb6cd0bd8) = 25403 <0.000045>
12:46:15.640598 semop(11599962, {{0, -1, 0}}, 1) = 0 <0.000015>

我还尝试将strace作为进程的子进程而不是父进程来运行(希望这会有所不同)。即使我试图捕捉随机的分段错误,但它从未出现/发生过。

现在我的问题是,这是常见的和故意的,还是我的strace-call是假的。如果没有,有没有我需要注意的syscall,因为它们可能不能与strace一起工作,或者这种奇怪的行为与一组syscall有关吗?有什么办法可以解决这个问题吗?

我正在使用debian-squeeze,如果这可能是相关的话。

更新1

我完全忘记提到我正在运行多个线程(POSIX线程)和几个孩子。虽然pthread_cond_wait()应该不会遇到任何竞争,因为它绝对是pthread_mutex_lock()之后的第一个调用,它访问我解析为参数的pthread_cond_tpthread_mutex_t。但我不知道pthread_cond_wait()内部是否存在任何竞争条件。我会提供程序代码,如果有必要。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-11 19:10:45

这类问题最有可能的原因是strace可能会影响应用程序的时间,这可能会暴露出锁定错误。

票数 3
EN

Stack Overflow用户

发布于 2012-08-11 19:11:51

几乎所有的C++和C段故障在某些时候都包含未定义的行为。因此,编译器可以自由地实现一个在strace运行时不会触发的崩溃系统。

更严重的是,程序中有没有在strace下不会发生的定时问题呢?这些计时问题在多线程中尤其小气(例如,只有在发布模式下才会发生死锁)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11914097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档