gpt4 book ai didi

c - 我如何确定一个线程在哪里接触另一个线程的堆栈?

转载 作者:太空宇宙 更新时间:2023-11-04 04:51:09 25 4
gpt4 key购买 nike

我正在通过 Intel 的 Inspector XE 运行一个应用程序,它告诉我我的一个线程正在访问另一个线程的堆栈,但它无法告诉我涉及哪些线程或代码中发生的位置。

我在想可能有某种每线程 VirtualProtect 或某种在上下文切换期间调用代码的方法,但我找不到任何东西。

有什么方法可以让我在表演中捕获线索,还是我运气不好?

最佳答案

从线程创建例程开始。确保传递的指针没有指向堆栈。你应该能够使用 grep 来帮助解决这个问题。例如。假设您使用 pthreads,grep -E pthread_create\([^,]+\,[^,]+\,[^,]+\,[^&]+\& *.c 或如果指针是在 pthread_create 函数调用中使用 & 运算符创建的,则类似的东西可能会给你带来罪魁祸首。

您可以考虑使用 grep -E "[[:alnum:]_]+[[:space:]]+[[:alnum:]_]+\[[ 构建数组标识符列表^]]+]"*.c,并根据在函数内部声明的任何数组构建模式列表。

否则,grep -E pthread_create *.c 至少会为您提供创建线程的每一行,以及传递给入口点的指针的表达式。如果该指针指向 malloc 的结构或指针(例如 fubar **argument; argument = malloc(sizeof *argument);),找到该结构或指针被修改的位置并确保它是未修改为指向堆栈。

关于c - 我如何确定一个线程在哪里接触另一个线程的堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15079476/

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