小编And*_*rei的帖子

打印线程的调用堆栈(c++),StackWalker 与否?

需要通过线程句柄打印 C++ 应用程序线程的调用堆栈,我转向了之前的 stackoverflow 答案中提到的StackWalker 。

然而,StakWalker 代码的日期是 2005 年。我怀疑从那时起有些东西发生了变化。

当我编译并运行它时,出现错误(如下),并且输出似乎不完整,在错误时被截断。测试应打印更多测试用例。

有人有更新的或不同的工作调用堆栈打印已发布的代码吗?

e:\boris\stackwalker\stackwalker\main.cpp (31): Func5
e:\boris\stackwalker\stackwalker\main.cpp (32): Func4
e:\boris\stackwalker\stackwalker\main.cpp (33): Func3
e:\boris\stackwalker\stackwalker\main.cpp (34): Func2
e:\boris\stackwalker\stackwalker\main.cpp (35): TestCurrentThread
e:\boris\stackwalker\stackwalker\main.cpp (139): main
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (582): __tmainCRTStartup
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (399): mainCRTStartup  
VVVVV  
ERROR: SymGetLineFromAddr64, GetLastError: 487 (Address: 7C817077)  
^^^^^  
7C817077 (kernel32): (filename not available): RegisterWaitForInputIdle
Run Code Online (Sandbox Code Playgroud)

c++ winapi callstack stack-trace debug-symbols

3
推荐指数
1
解决办法
3303
查看次数

Excel csv文件中的字符串(123)

我正在创建要导入Excel的csv文件。一些值是字符串(123)。

我需要它们显示为(123)。Excel将它们显示为-123。

我可以添加哪些字符以使Excel将其显示为(123),而无需进行导入后手动格式化?

试过双引号,没有帮助。谢谢。

csv excel

2
推荐指数
1
解决办法
1962
查看次数

小单元测试

当我进行小型单元测试(从我的库中调用我的函数的小 exe,或者调用一段嵌入在 main() 之前的代码时,在 Linux 中它似乎比在 msvc 中快 50 倍:

1)在Linux中:

vi test1.c; 剪切和粘贴包括。剪切和粘贴代码。添加 int main(int argc, char **argv) { declare_data; call_my_function(); :wq!cc test1.c && ./a.out done 每一步都需要几秒钟。如果没有,帮助程序脚本让它秒。

2)在msvc中:

创建控制台项目。直到项目创建完成,已经比整个(1)时间多。粘贴代码。摆弄项目设置。尝试通过 argv。尝试传递不同的 argv。

似乎一切都比 Linux 慢了 10 倍。

根据您的经验,在 msvc 中,可以在几秒钟内真正快速地创建和完成小型单元测试?

c c++ linux unit-testing visual-c++

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

define assignment operator =只允许零rhs,否则不会编译

简而言之:
如何为我的类定义operator =,使其仅在rhs为0(obj = 0)时
编译,但如果rhs为非0值则给出编译错误.
我知道这是可能的,忘了怎么样.

更长:
我有C类.我想允许赋值obj = 0这个类的对象(这意味着,重置对象),但是没有定义任何其他整数或指针的赋值.除了obj = 0之外,没有定义整数或指针的转换.

C obj;
obj = 0; // reset object
Run Code Online (Sandbox Code Playgroud)

在里面operator=,我能做到assert(rhs == 0),但那还不够好.
我知道这是可能的定义operator=,使得
它使编译错误,如果RHS不为0忘记的细节.
任何人都可以补充吗?

谢谢

c++

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

棘手的InterlockedDecrement与CriticalSection相关

有全球long count反击.
线程A做

EnterCriticalSection(&crit);
// .... do something
count++;                       // (*1)
// .. do something else
LeaveCriticalSection(&crit);
Run Code Online (Sandbox Code Playgroud)

线程B的确如此

InterlockedDecrement(&count); // (*2) not under critical secion.
Run Code Online (Sandbox Code Playgroud)

在(*1),我处于一个关键部分.在(*2),我不是.

(*1)没有安全InterlockedIncrement()吗?(它是受保护的关键部分).
我需要InterlockedIncrement()(*1)吗?
我觉得我可以赞成和反对.

c++ winapi thread-safety

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

用于通信的二进制缓冲区,c ++

如果我需要一个二进制缓冲区对象,
比如用于TCP/UDP通信的对象,
那么我将在c ++中使用什么?

  • vector<unsigned char>

  • std::string? - std :: string可以容纳0字节,与普遍看法相反,所以它可以用来保存二进制数据

  • new char[]

  • malloc()

有没有人看到用于二进制缓冲区的std :: vector?
我没看到.为什么?表现?

我确实看到malloc()经常用于二进制缓冲区.
在C++中.任何人都可以确认吗?解释一下?

谢谢

c++ malloc winapi memory-management stl

0
推荐指数
1
解决办法
348
查看次数