如何在C++源代码,DLL或VC++编译器创建的任何文件中查找所有全局变量?

Mic*_*zyk 22 c++ multithreading thread-safety visual-studio visual-c++

我正在使我的应用程序线程安全.其中一个步骤是同步访问或消除全局变量的使用.我正在使用Visual Studio.我找不到任何在我的代码库中查找所有全局变量的好方法.创建一个好的文本搜索模式是不可能的,我找不到任何有用的工具.你们知道有什么好办法吗?它可以是源代码分析工具或二进制文件分析器.

Amb*_*wal 12

这有助于:

  1. 在visual studio中打开项目.
  2. 打开项目的"班级视图"
  3. 在项目标题下,您将找到"全局函数和变量".

我已经使用Visual Studio 2010及更高版本检查了这一点.

编辑:正如 Ajay在评论中所建议的那样,您还可以对组中的项目进行分类.对于分组项目:

  1. 在课堂视图中,右键单击项目标题
  2. 选择"按对象分组/成员类型"
  3. 选择所需的树,如变量或结构或枚举等.


pet*_*hen 8

一个选项可能是让链接器生成映射文件(Visual Studio中的/ MAP).

您将获得每个二进制文件的.map文件,其中包含两个部分:

细分表

 Start         Length     Name                   Class
 0001:00000000 00010000H .textbss                DATA
 0002:00000000 000034b4H .text                   CODE
 0003:00000000 00000104H .CRT$XCA                DATA
 0003:00000104 00000104H .CRT$XCAA               DATA
 0003:00000208 00000104H .CRT$XCZ                DATA
 0003:0000030c 00000104H .CRT$XIA                DATA
 ...
Run Code Online (Sandbox Code Playgroud)

符号列表(函数和数据)

  Address         Publics by Value              Rva+Base       Lib:Object

 0000:00000000       ___safe_se_handler_count   00000000     <absolute>
 0000:00000000       ___safe_se_handler_table   00000000     <absolute>
 0000:00000000       ___ImageBase               00400000     <linker-defined>
 0001:00000000       __enc$textbss$begin        00401000     <linker-defined>
 0001:00010000       __enc$textbss$end          00411000     <linker-defined>
 0002:000003a0       _wmain                     004113a0 f   console4.obj
 ...
Run Code Online (Sandbox Code Playgroud)

您可以通过段列表中的"CODE"/"DATA"设计来区分变量中的函数.

优点:您将获得链接器未删除的所有符号,甚至是库中的符号.

Disadvanatge:您将获得链接器未删除的所有符号,甚至是库中的符号.我不知道任何自动执行代码/数据分离的工具.


osg*_*sgx 3

我知道http://code.google.com/p/data-race-test/wiki/ThreadSanitizer程序(google 的产品)可以在 Windows 和编译代码上运行。它是动态检测程序(如 valgrind 或有点像 qemu/virtualbox),它为内存访问添加了一些检查。它将尝试发现一些线程问题。您可以在threadsanitizer的控制下运行您的程序。动态翻译和检测代码将会导致速度减慢(速度减慢 20 倍至 50 倍)。但有些问题会被自动检测到。

它还允许您在源代码中注释一些自定义同步函数。

程序的 Wiki 有其他线程竞争检测器的链接:http://code.google.com/p/data-race-test/wiki/RaceDetectionLinks