-
March 23rd, 2020, 06:49 AM
#1
RtlCaptureStackBackTrace
Does anyone know what I need to #include in order to get RtlCaptureStackBackTrace in VS2019?
The MSDN page suggests that it's in winnt.h but that I should either include FltKernel.h or Ntifs.h - but if I #include either FltKernel.h or Ntifs.h, the compiler tells me it can't find them (and in fact they don't seem to exist on my system). And if I simply #include winnt.h, RtlCaptureStackBackTrace comes up as an unidentified symbol
"A problem well stated is a problem half solved.” - Charles F. Kettering
-
March 23rd, 2020, 11:23 AM
#2
Re: RtlCaptureStackBackTrace
Originally Posted by John E
Does anyone know what I need to #include in order to get RtlCaptureStackBackTrace in VS2019?
The MSDN page suggests that it's in winnt.h but that I should either include FltKernel.h or Ntifs.h - but if I #include either FltKernel.h or Ntifs.h, the compiler tells me it can't find them (and in fact they don't seem to exist on my system). And if I simply #include winnt.h, RtlCaptureStackBackTrace comes up as an unidentified symbol
Have you installed the Windows Sdk? Are the VS paths set to find the sdk?
-
March 23rd, 2020, 12:14 PM
#3
Re: RtlCaptureStackBackTrace
Using RtlCaptureStackBackTrace() with my VS2019 compiles OK with #include <winnt.h> (the other ones should be automatically included with winnt.h). As Arjay says in his post #2, have you got an SDK installed? In VS Installer, configuration - which SDK(s) have you got installed?
All advice is offered in good faith only. All my code is tested (unless stated explicitly otherwise) with the latest version of Microsoft Visual Studio (using the supported features of the latest standard) and is offered as examples only - not as production quality. I cannot offer advice regarding any other c/c++ compiler/IDE or incompatibilities with VS. You are ultimately responsible for the effects of your programs and the integrity of the machines they run on. Anything I post, code snippets, advice, etc is licensed as Public Domain https://creativecommons.org/publicdomain/zero/1.0/ and can be used without reference or acknowledgement. Also note that I only provide advice and guidance via the forums - and not via private messages!
C++23 Compiler: Microsoft VS2022 (17.6.5)
-
March 24th, 2020, 09:27 AM
#4
Re: RtlCaptureStackBackTrace
Hi guys - the only ones which say SDK in their name are:-
Windows 10 SDK (10.0.18362.0)
Windows Universal CRT SDK
.NET Framework 4.6.1 SDK
.NET Framework 4.8 SDK
.NET Core 3.0 SDK
"A problem well stated is a problem half solved.” - Charles F. Kettering
-
March 24th, 2020, 10:36 AM
#5
Re: RtlCaptureStackBackTrace
I guess the
Windows 10 SDK (10.0.18362.0)
is what you need to install.
Victor Nijegorodov
-
March 24th, 2020, 10:50 AM
#6
Re: RtlCaptureStackBackTrace
Thanks Victor but that one's already installed...
[Edit...] Here's how it looks in winnt.h :-
Code:
// begin_ntifs
#pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
#if (NTDDI_VERSION > NTDDI_WINXP)
NTSYSAPI
_Success_(return != 0)
WORD
NTAPI
RtlCaptureStackBackTrace(
_In_ DWORD FramesToSkip,
_In_ DWORD FramesToCapture,
_Out_writes_to_(FramesToCapture,return) PVOID* BackTrace,
_Out_opt_ PDWORD BackTraceHash
);
#endif
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */
So maybe one of the #if's is failing...
Last edited by John E; March 24th, 2020 at 10:58 AM.
"A problem well stated is a problem half solved.” - Charles F. Kettering
-
March 24th, 2020, 12:16 PM
#7
Re: RtlCaptureStackBackTrace
Ah. Have you set _WIN32_WINNT? This needs to reflect the version of the OS to be used. Sorry, I automatically set it at the top of any of my code before anything else.
For Windows 7 I use:
Code:
#ifdef WINVER
#undef WINVER
#endif
#define WINVER 0x0601
#ifdef _WIN32_WINNT
#undef _WIN32_WINNT
#endif
#define _WIN32_WINNT WINVER
For info about the version numbers see https://docs.microsoft.com/en-us/cpp...t?view=vs-2019
All advice is offered in good faith only. All my code is tested (unless stated explicitly otherwise) with the latest version of Microsoft Visual Studio (using the supported features of the latest standard) and is offered as examples only - not as production quality. I cannot offer advice regarding any other c/c++ compiler/IDE or incompatibilities with VS. You are ultimately responsible for the effects of your programs and the integrity of the machines they run on. Anything I post, code snippets, advice, etc is licensed as Public Domain https://creativecommons.org/publicdomain/zero/1.0/ and can be used without reference or acknowledgement. Also note that I only provide advice and guidance via the forums - and not via private messages!
C++23 Compiler: Microsoft VS2022 (17.6.5)
-
March 25th, 2020, 04:01 AM
#8
Re: RtlCaptureStackBackTrace
Originally Posted by 2kaud
Ah. Have you set _WIN32_WINNT? This needs to reflect the version of the OS to be used.
That was it 2kaud, thanks (I still had it set to 0x500)
On a separate issue... I often see this code in programs written for gcc:-
Code:
#include <limits>
int x = std::min(something, something_else);
but for building with MSVC I always need to change it to #include <algorithm> - is that something which got changed at some point or is this really different for different compilers?
"A problem well stated is a problem half solved.” - Charles F. Kettering
-
March 25th, 2020, 05:11 AM
#9
Re: RtlCaptureStackBackTrace
std::min() is part of <algorithms>. It's possible that for gcc <limits> also includes <algorithms>. Different compilers have different STL implementations. Also, min may be implemented in another file which is included by algorithms, limits etc. If you look at the STL include files you'll see that they themselves also use multiple includes (which aren't documented as considered internal to an implementation). Some programmers know that xx is defined in aa and yy is defined in bb which also includes aa. So if they need both xx and yy they just include bb as they know that bb also includes aa. IMO this is not good practice - the required include should always be used - there's no penalty via include guards etc. There's no guarantee that in future these internal includes might change.
All advice is offered in good faith only. All my code is tested (unless stated explicitly otherwise) with the latest version of Microsoft Visual Studio (using the supported features of the latest standard) and is offered as examples only - not as production quality. I cannot offer advice regarding any other c/c++ compiler/IDE or incompatibilities with VS. You are ultimately responsible for the effects of your programs and the integrity of the machines they run on. Anything I post, code snippets, advice, etc is licensed as Public Domain https://creativecommons.org/publicdomain/zero/1.0/ and can be used without reference or acknowledgement. Also note that I only provide advice and guidance via the forums - and not via private messages!
C++23 Compiler: Microsoft VS2022 (17.6.5)
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|