需要通过线程句柄打印 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) 我正在创建要导入Excel的csv文件。一些值是字符串(123)。
我需要它们显示为(123)。Excel将它们显示为-123。
我可以添加哪些字符以使Excel将其显示为(123),而无需进行导入后手动格式化?
试过双引号,没有帮助。谢谢。
当我进行小型单元测试(从我的库中调用我的函数的小 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 中,可以在几秒钟内真正快速地创建和完成小型单元测试?
简而言之:
如何为我的类定义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忘记的细节.
任何人都可以补充吗?
谢谢
有全球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)吗?
我觉得我可以赞成和反对.
如果我需要一个二进制缓冲区对象,
比如用于TCP/UDP通信的对象,
那么我将在c ++中使用什么?
vector<unsigned char> ?
std::string? - std :: string可以容纳0字节,与普遍看法相反,所以它可以用来保存二进制数据
new char[] ?
malloc() ?
有没有人看到用于二进制缓冲区的std :: vector?
我没看到.为什么?表现?
我确实看到malloc()经常用于二进制缓冲区.
在C++中.任何人都可以确认吗?解释一下?
谢谢
c++ ×5
winapi ×3
c ×1
callstack ×1
csv ×1
excel ×1
linux ×1
malloc ×1
stack-trace ×1
stl ×1
unit-testing ×1
visual-c++ ×1