如何准确找到从哪个 class 调用 DoModal()?

How to find exactly from which class DoModal() is called?

我正在使用具有大量对话框的 MFC 应用程序。调试时我无法分辨哪个 class 或函数创建了这个对话框。

为了说明问题,我创建了一个简单的基于对话框的 MFC 应用程序。 运行 它处于调试模式并暂停调试。

我可以看到使用 CDialog::DoModal() 在调用堆栈中调用了 DoModal。我如何准确理解哪个函数以及 class 这个 DoModal() 被调用?

如果在 CDialog 构造函数中设置断点,则更容易找到 class。从那里的调用堆栈中,您将能够看到您的对话框 class 是什么。

您可以在 CDialog::OnInitDialog() 中设置断点,最终由 DoModal() 调用。

OnInitDialog 方法几乎总是被 "leaf" CDialog 派生的 class 覆盖(虽然不一定),但更重要的是,总是被链接回来。因此,只需将调用堆栈向上移动到 "first" 对 OnInitDialog() 的调用,它应该引用 class.

如果它不是 'leaf' class,或者它没有被链接回去,@JoeWillcoxson 的回答仍然有效。