相关疑难解决方法(0)

如何在Win32应用程序中打印到调试输出窗口?

我有一个win32项目,我已经加载到Visual Studio 2005中.我希望能够将内容打印到Visual Studio输出窗口,但我不能为我的生活找出方法.我试过'printf'和'cout <<',但是我的信息一直没有打印.

是否有某种特殊的方式来打印到Visual Studio输出窗口?

c++ console winapi visual-studio-2005 visual-studio

86
推荐指数
6
解决办法
19万
查看次数

编译时__FILE__宏操作处理

我在将一些东西从Solaris移植到Linux时遇到的一个问题是Solaris编译器__FILE__在预处理过程中将宏扩展为文件名(例如MyFile.cpp),而Linux上的gcc扩展到完整路径(例如/ home /用户/ MYFILE.CPP).使用basename()可以很容易地解决这个问题但是......如果你经常使用它,那么对basename()的所有调用都必须加起来,对吧?

这是问题所在.有没有办法使用模板和静态元编程,在编译时运行basename()或类似的?由于它__FILE__是常量且在编译时已知,因此可能更容易.你怎么看?可以吗?

c c++ templates metaprogramming

23
推荐指数
7
解决办法
9474
查看次数

如何在编译时提取没有路径和后缀的源文件名?

同时使用带有-std = c11的gcc和带有-std = c ++ 14的g ++.

例如,对于一个名为src/dir/Hello.cxx它的文件,它应该扩展为例如:

const char basename[] = "Hello";
Run Code Online (Sandbox Code Playgroud)

要么

const char basename[] = getStaticBasename(__FILE__);
Run Code Online (Sandbox Code Playgroud)

如何getStaticBasename()是一个宏(对于C源)或constexpr函数(对于C++源),其结果为"Hello".

我必须避免__FILE__在运行时拆分字符串,因为路径和后缀不能以任何方式编译到可执行文件中.

解决方案必须不依赖于大型库,例如boost.

因为我没有makefile,所以在我的情况下不能使用这样的解决方案.

有人有解决方案吗?

编辑2015-07-02:

  • 我对如何调用编译器和链接器没有影响(有时通过makefile,有时来自命令行,或某些IDE(Eclipse CDT托管make,Crossworks,Xcode等等).所以解决方案只需要代码.
  • 我的用例是为小型日志记录解决方案提供某种"通用区域标识符".应用程序代码(使用我的记录器)应该只#include <Joe/Logger.h>在后面的调用中,例如LOG_DEBUG(...)我将隐含地使用自动生成的"通用区域标识符".
  • 我目前的解决方案是应用程序代码必须在它放入代码之前声明一个JOE_LOG_FILE_REGION(Hello);(之后#include <Joe/Logger.h>)LOG_DEBUG(...).

c c++ c++11 c11 c++14

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

是否有基本win32 C++的TRACE语句?

在MFC C++(Visual Studio 6)中,我习惯使用TRACE宏进行调试.是否有一个与win32相同的声明?

c++ debugging winapi visual-c++-6

8
推荐指数
1
解决办法
9798
查看次数

Cpp预处理器和文件名的基名,行号为字符串

我想"example.cpp:34"用预处理器生成表单的静态字符串,但__FILE__宏将扩展为"lib/example/example.cpp"__LINE__扩展34为整数.我可以使用预处理器构造所需的字符串吗?海湾合作委员会的扩展是可以的.

编辑这里最重要的部分是我想要一个静态C风格的字符串,所以我不能使用该basename函数.我想知道预处理器中是否有某种方法来复制该功能,可能还有一个boost扩展?

c++ gcc c-preprocessor

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

具有绝对路径的 C++ __FILE__ 宏

我试图在 C++ 编译时获取编译文件的绝对路径。我知道该__FILE__宏 - 但是,该宏可以计算为绝对路径或相对路径,具体取决于预处理器的参数。

我想确保我的__FILE__(或任何其他宏)计算结果为文件的完整绝对路径。有没有办法可靠地跨平台做到这一点?(我正在为 VS2013、VS2015、ubuntu 上的 GCC、MinGW 上的 GCC 进行编译)

c++ gcc preprocessor visual-studio

5
推荐指数
0
解决办法
2183
查看次数

使用 -ffile-prefix-map 会中断调试

在 $DAYJOB,我正在尝试使用reproducible-builds.org中的提示来实现可重现的构建,以便更轻松地调试已发布的软件,而我们的构建服务器上不再有完整的调试版本。

在 GCC 中使用-ffile-prefix-map=/path/to/build=src选项来避免泄漏内部文件路径确实有助于使一些错误消息更清晰,但在使用 GDB 时确实会产生问题。我位于 /path/to/build/some/binary/ 并在 /path/to/build/lib/cclib/ 中命中断点:

Breakpoint 1, [...]
at src/lib/cclib/eventloop.cc:154
154    src/lib/cclib/eventloop.cc: No such file or directory.
(gdb)
Run Code Online (Sandbox Code Playgroud)

作为解决方法,我可以符号链接src到构建树的根,但是有没有更好的方法来确保 gdb 理解映射?

gcc gdb binary-reproducibility

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