小编shr*_*ght的帖子

获取GDB便利变量中保存的值的符号信息

我经常发现在调试程序时使用堆栈是很有用的,并且我会遇到任何正确对齐的,指针大小的值的符号.我已经厌倦了手动执行此操作,因此我尝试编写一个命令来为我完成此操作.问题是"信息符号"似乎不喜欢在通过指针取消引用设置其参数时使用便利变量作为其参数.IE:

(gdb) info symbol 0xb6ca4d28
[Useful Symbol Information]
(gdb) set $pointer = $esp
(gdb) while ( *(int*)$pointer != 0xb6ca4d28)
 >set $pointer += 4
 >end
(gdb) x/x $pointer
0x6ebee064:     0xb6ca4d28
(gdb) set $dereferencePointer = *(int *)$pointer
(gdb) p/x $dereferencePointer
$103 = 0xb6ca4d28
(gdb) info symbol $dereferencePointer
No symbol matches $dereferencePointer.
(gdb) set $dereferencePointer = 0xb6ca4d28
(gdb) p/x $dereferencePointer
$104 = 0xb6ca4d28
(gdb) info symbol $dereferencePointer
[Useful symbol information]
(gdb)
Run Code Online (Sandbox Code Playgroud)

为什么是这样?这是一个错误吗?有没有不同的方法来做到这一点?

谢谢!

吕克

PS:使用vanilla GDB 7.5

从列表更新:

这很可能是一个错误.

c c++ debugging gdb

7
推荐指数
1
解决办法
579
查看次数

在Windows上,控制台窗口所有权如何工作?

从另一个控制台应用程序启动控制台应用程序时,控制台所有权如何工作?

我看到四种可能性:

  1. 第二个应用程序在其生命周期内从第一个应用程序继承控制台,控制台在退出时返回到原始所有者.
  2. 每个应用程序都有自己的控制台 Windows然后以某种方式将两者的内容合并到用户可见的"控制台"中
  3. 第二个应用程序获取属于第一个应用程序的控制台的句柄.
  4. 控制台放在共享内存中,两个应用程序都具有相同的"所有权"

我很可能错过了一些东西,这四个选项都没有充分描述Windows对其控制台的作用.

如果答案接近选项4.我的后续问题是两个过程中的哪一个负责管理窗口?(在需要刷新/重绘屏幕时处理图形更新等)

一个具体的例子:运行CMD.然后,使用CMD运行[console application].[控制台应用程序]将写入与CMD正在使用的控制台窗口相同的内容.

windows console winapi console-application

5
推荐指数
1
解决办法
2201
查看次数

内联函数体的潜在评估和模板成员的实例化

何时表达式包含在标记为内联的函数内,被认为是"潜在评估"?

a.cpp

template <typename T>
const T& foo(const T& arg) { return arg; }

inline void dead() {
    int x(21);
    x = foo(x);
}
Run Code Online (Sandbox Code Playgroud)

b.cpp

#include <iostream>

template <typename T> const T& foo(const T&);

int main(int argc, char *argv[]) {
    std::cout << foo(12) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

如果在定义内联函数时将表达式视为"可能已评估",则应该实例化模板,并且我希望$(CCC) -c a.cpp; $(CCC) -c b.cpp; $(CCC) a.o b.o -o bin成功链接.相反,如果这样的函数本身变得使用了,那么在内联声明的函数中的表达式只会变为"可能被评估",那么我希望$(CCC) -c a.cpp; $(CCC) -c b.cpp; $(CCC) a.o b.o -o bin在链接步骤中失败.

到目前为止,我已经测试了xl C++ 12(成功链接)和各种版本的gcc + clang 3.5(所有这些都无法链接).

哪种行为是正确的?我在这里错过了第三种选择吗?

c++ one-definition-rule inline-functions language-lawyer c++11

4
推荐指数
1
解决办法
141
查看次数