gpt4 book ai didi

c++ - 调试器问题

转载 作者:可可西里 更新时间:2023-11-01 17:30:17 26 4
gpt4 key购买 nike

我有一个正在追查的错误(我认为它是一个死锁)。当我运行代码时它挂起而调试器没有标记错误,所以过了一会儿我尝试按下暂停(全部中断)按钮。然后调试器报告“该进程似乎已死锁...”。然后我可以看到所有线程都被阻止在 EnterCriticalSection 行,除了已经在关键部分内的线程。当我用调试器查看 C.S. 内部的线程时,我看到一个绿色箭头,伴随着一个蓝色的小圆圈,指向一 strip 有 GetWindowText 的线...如下所示:

// stuff A
{
GetWindowText(editwin[a].child_window_handle,existing_text,MAX_TEXT_SIZE-1);
}
// stuff B

如果我将鼠标悬停在绿色箭头上,我会看到文本“这是该线程从当前函数返回时要执行的下一条语句”。现在这让我很困惑,因为我不知道这是否意味着它卡在“东西 A”中并正在等待返回,或者它卡在 GetWindowText 中并且不知何故卡在里面。 GetWindowText 的参数在我看来都很合理。如果我点击“单步执行”,我会收到消息“无法单步执行。进程已被软中断”。

编辑:东西 A 实际上是声明:

if (buf_ptr != NULL)

最佳答案

通常,一行代码旁边的绿色箭头表示“这是将要执行的下一行,如果不是因为我们被困在更深的堆栈框架中的某个地方的话。”但是,根据目前提供的信息,VS 无法确定...

[编辑 - 当然,对 Win32 的深入了解可以提供一个很好的猜测 - 请参阅“mos”的答案以获得基于 GetWindowText() API 已知陷阱的可能解释]

如前所述,Visual Studio 向您显示的内容有时会产生误导。为了更深入地了解正在发生的事情,您需要关闭 VS 默认启用的一些无用的“功能”。在工具 -> 选项 -> 调试 -> 常规中,确保:

  • 启用地址级调试 = ON
  • 仅启用我的代码 = 关闭
  • 启用源服务器支持 = ON

这应该允许您:

1) 中断/跨过/等等导致死锁的确切指令

2) 查看到此为止的完整堆栈跟踪,无论模块是什么

3) 尽可能查看源代码,假设您的 symbol & source servers are configured correctly

关于c++ - 调试器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1488037/

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