// Compile with "cl /c /Zi /GR- symbolformat.cpp" // Compile symbolformat-fpo.cpp (see file for instructions) // Link with "link symbolformat.obj symbolformat-fpo.obj /debug /nodefaultlib // /entry:main /out:symbolformat.exe" int __cdecl _purecall(void) { return 0; } enum TestEnum { Value, Value10 = 10 }; enum class TestEnumClass { Value, Value10 = 10 }; struct A { virtual void PureFunc() = 0 {} virtual void VirtualFunc() {} void RegularFunc() {} }; struct VirtualBase { }; struct B : public A, protected virtual VirtualBase { void PureFunc() override {} }; struct MemberTest { enum NestedEnum { FirstVal, SecondVal }; typedef int NestedTypedef; NestedEnum m_nested_enum; NestedTypedef m_typedef; bool m_bool; char m_char; wchar_t m_wchar_t; int m_int; unsigned m_unsigned; long m_long; unsigned long m_unsigned_long; __int64 m_int64; unsigned __int64 m_unsigned_int64; float m_float; double m_double; void (*m_pfn_2_args)(int, double); int m_multidimensional_array[2][3]; }; typedef int IntType; typedef A ClassAType; int g_global_int; void *g_global_pointer = nullptr; typedef int int_array[3]; int_array g_array = { 1, 2, 3 }; int_array *g_pointer_to_array = &g_array; const int *g_pointer_to_const_int = nullptr; int * const g_const_pointer_to_int = nullptr; const int * const g_const_pointer_to_const_int = nullptr; int main(int argc, char **argv) { // Force symbol references so the linker generates debug info B b; MemberTest members; auto PureAddr = &B::PureFunc; auto VirtualAddr = &A::PureFunc; auto RegularAddr = &A::RegularFunc; TestEnum Enum = Value; TestEnumClass EnumClass = TestEnumClass::Value10; IntType Int = 12; ClassAType *ClassA = &b; return 0; }