如何准确找到从哪个 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 的回答仍然有效。
我正在使用具有大量对话框的 MFC 应用程序。调试时我无法分辨哪个 class 或函数创建了这个对话框。
为了说明问题,我创建了一个简单的基于对话框的 MFC 应用程序。 运行 它处于调试模式并暂停调试。
我可以看到使用 CDialog::DoModal()
在调用堆栈中调用了 DoModal。我如何准确理解哪个函数以及 class 这个 DoModal()
被调用?
如果在 CDialog 构造函数中设置断点,则更容易找到 class。从那里的调用堆栈中,您将能够看到您的对话框 class 是什么。
您可以在 CDialog::OnInitDialog()
中设置断点,最终由 DoModal()
调用。
OnInitDialog
方法几乎总是被 "leaf" CDialog 派生的 class 覆盖(虽然不一定),但更重要的是,总是被链接回来。因此,只需将调用堆栈向上移动到 "first" 对 OnInitDialog()
的调用,它应该引用 class.
如果它不是 'leaf' class,或者它没有被链接回去,@JoeWillcoxson 的回答仍然有效。