gpt4 book ai didi

c++ - 从未执行过的代码中的微小更改如何产生影响?

转载 作者:可可西里 更新时间:2023-11-01 18:25:49 25 4
gpt4 key购买 nike

我有一个非常奇怪的问题,由于我无法发送代码,所以我会尝试解释一下。

这更像是哲学问题 - 我希望有人有时间/知识来思考这个问题。

1) 我的 project.cpp 看起来完全像这样:

#include <pthread.h>
#include <unistd.h>
pthread_t pplayer_thread;
void *play(void*);

int main(int argc, char **argv) {
pthread_create(&pplayer_thread, NULL, play_cb, NULL);
usleep(5000000);
return 0;
}

2) pplayer.cpp 看起来像这样:

...
void *play_cb(void *arg) {
// this starts movie using gstreamer and exits thread
}
...

3) not_executed_from_main.cpp 看起来像这样:

...
extern MyClass *myObj; // this is included from .h file
...
MyClass *myObj = NULL;
...
some_function() {
...
myObj = MyClass::createNew(args);
...
}
...

这一切都与其他各种库和大量垃圾链接在一起,但这基本上是重要的。

--> 问题:

当我运行它时,我应该看到窗口使用 gstreamer 播放影片剪辑 5 秒 -> 但我只听到声音!

--> 奇怪的事情:

当我评论该行时:

myObj = MyClass::createNew(args);

然后再次运行 --> 我也看到了 gstreamer 窗口(一切正常)

--> 注释:

这可能与:

  • 链接过程MyClass 及其父类的性质(我最好的猜测)
  • “静态”关键字
  • “外部”关键字
  • C 和 C++ 混合

--> 我再问一次:

对从未执行过的代码进行微小的更改会产生什么不同?

(请帮忙)

最佳答案

看来你需要熟悉chaos theory .在一个足够复杂的系统中,最微小的变化可以通过任何固有的不稳定性传播到导致巨大差异的程度。

在您的情况下,它可以是任何东西,从该方法的隐式副作用到可执行代码布局更改时变得可见的与内存相关的错误。

您应该使用调试器来跟踪您的代码。确保实际上没有执行假定未执行的代码中的任何内容。您的代码可能正在进入您错误地认为无法访问的代码路径,或者您程序的某些其他部分(例如静态启动器)可能正在运行。

Valgrind如果它适用于您的平台,它也很有用 - 它将检测大量与内存相关的错误,就像我怀疑您手中的错误一样。不幸的是,它不太擅长检测堆栈中的错误 - 不过,您的编译器可能会在这方面提供帮助。

关于c++ - 从未执行过的代码中的微小更改如何产生影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9009081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com