Ale*_*x W 6 debugging 64-bit visual-studio visual-c++
在打开优化的情况下编译64位VC 2005应用程序时,无法在崩溃转储文件中查看所有本地变量.在许多情况下,局部变量或参数存储在寄存器中而不是堆栈中.对其他函数的后续调用(例如错误处理函数)有时会覆盖这些值.这使得难以追踪问题的原因.有没有办法在运行时强制将局部变量和/或参数添加到堆栈?
关闭优化是一种方法,但这会使应用程序变慢,并且通常不是发布版本的好主意.我希望有一个运行时调用将转储所有本地变量和/或注册表.如果有这样的函数,我们可以在调用错误记录函数之前调用该函数,并希望能够在堆栈上看到更多的局部变量.
- 亚历克斯
如果您获取变量的地址,编译器将被迫在堆栈上为其分配空间,因此您可以编写一个小宏。
#ifdef DEBUG
#define FORCE_ON_STACK(var) void * p##var##_dummy = (void *)&var
#else
#define FORCE_ON_STACK(var) (void)0 // eat the ;
#endif
Run Code Online (Sandbox Code Playgroud)
在某些情况下,编译器可能仍然懒于保持堆栈上的值与寄存器同步。另外,将参数保留在寄存器中也是一项重要的优化,这至少会部分失败,因此这会在一定程度上影响性能。
| 归档时间: |
|
| 查看次数: |
1004 次 |
| 最近记录: |