เอกสาร Steamworks
การดีบัก Steamworks API

ภาพรวม

ในช่วงหลายปีที่ผ่านมา Steam ได้เติบโตกลายมาเป็นแอปพลิเคชันขนาดใหญ่ และให้โมดูลการใช้งานแยกจากกันหลายโมดูล ที่มาพร้อมกับวิธีดีบักหลากหลายวิธี หน้านี้จะแสดงวิธีดีบักให้มากที่สุดเท่าที่จะเป็นไปได้ เพื่อช่วยให้คุณสามารถใช้งาน Steam และ Steamworks ได้เต็มประสิทธิภาพมากที่สุดและปวดหัวน้อยที่สุด

Steam จะส่งดีบักจำนวนหนึ่งไปยังโฟลเดอร์ บันทึก โดยอัตโนมัติ พารามิเตอร์ในคอมมานด์ไลน์ของ Steam หรือ คำสั่งคอนโซล Steam เพื่อเปิดการใช้งานดีบัก

การใช้ ISteamUtils::SetWarningMessageHook จะอนุญาตให้แอปพลิเคชัน Steamworks ลงทะเบียนฟังก์ชันที่จะอนุญาตให้ Steamworks API แสดงข้อความแจ้งความผิดพลาดที่มนุษย์สามารถอ่านได้ให้กับแอปพลิเคชันเมื่อเกิดปัญหาขึ้นมา โดยส่วนมากแล้ว Steam API จะใช้สิ่งดังกล่าวนี้ เพราะฉะนั้นกรุณาอย่าลืมติดตั้งไว้และเข้าไปดูเวลาที่มีความผิดพลาดเกิดขึ้น

พารามิเตอร์ในคอมมานด์ไลน์ของ Steam

Steam จะใช้พารามิเตอร์ในคอมมานด์ไลน์เพื่อเปิดเผยให้ผู้พัฒนาได้รับทราบถึงรายละเอียด
  • -console - เปิดการใช้งานคอนโซล Steam คอนโซลจะให้ข้อความการดีบักเพิ่มเติม และจะทำให้คุณสามารถใช้งาน คำสั่งคอนโซล Steam ได้ นอกจากนี้ยังสามารถเปิดการใช้งานโดยการไปที่ steam://open/console ในเบราว์เซอร์หรือผ่านทางกล่องโต้ตอบ Windows Run ได้อีกด้วย
  • -debug_steamapi - เปิดการใช้งานการดีบัก Steamworks API พารามิเตอร์นี้มีความจำเป็นหากคุณกำลังต้องการใช้ ISteamUtils::SetWarningMessageHook!
  • -lognetapi - บันทึกข้อมูลเครือข่าย P2P ไปยัง log/netapi_log.txt
  • -log_voice - เขียนข้อมูลแช็ตด้วยเสียงไปยังไฟล์ logs/voice_log.txt
  • -installer_test - เปลี่ยนการติดตั้งเกมขายปลีกเพื่อส่งไฟล์ทั้งหมดไปยังโฟลเดอร์ install_validate/แทนที่จะเป็นแคช Steam

คำสั่งคอนโซล Steam

นอกจากจะให้ผลของข้อมูลเกี่ยวกับการรายงานหรือการบันทึกข้อผิดพลาดเพิ่มเติมแล้วนั้น คอนโซล Steam ยังสามารถใช้เพื่อออกคำสั่งไปยังไคลเอนต์หรือเซิร์ฟเวอร์ของ Steam ได้อีกด้วย ต่อไปนี้จะเป็นบางคำสั่งที่เป็นประโยชน์ต่อกระบวนการดีบัก
  • find <string> - ทำให้คุณสามารถค้นหาคำสั่งอื่น ๆ ที่เป็นประโยชน์ได้
  • set_spew_level - ทำให้คุณสามารถตั้งค่าเอาต์พุตระดับสูงขึ้นได้ในคอนโซล Steam และไฟล์ล็อก เช่น: "set_spew_level 4 4" - ให้การบันทึกอย่างละเอียดมากที่สุดและเป็นประโยชน์อย่างมากในการแก้ไขปัญหา
  • app_info_print <AppID> - แสดงข้อมูลทั้งหมดที่เซิร์ฟเวอร์ Steam ให้ไว้เกี่ยวกับเกม
  • enable/disable_license <PackageID> - คำสั่งนี้ช่วยให้สามารถทดสอบการเป็นเจ้าของแอปได้ โดยทั่วไปจะเป็นเนื้อหาดาวน์โหลด
  • testappcloudpaths <AppID> - ทำให้สามารถทดสอบการกำหดนค่า auto-cloud ก่อนที่จะเปิดการใช้งาน auto-cloud ให้กับลูกค้าทุกคน โดยคำสั่งนี้จะสามารถใช้งานกับไอดีแอปได้ครั้งละ 1 ไอดีเท่านั้น และจำเป็นต้องถูกเรียกใช้บนแต่ละไคลเอนต์ที่กำลังถูกทดสอบ
  • log_callbacks <first callbackID> <last callbackID> - บันทึกคอลแบ็กไปยังคอนโซล
  • log_matchmaking_callbacks <0|1> - เปิด/ปิดการใช้งานการบันทึกคอลแบ็กการค้นหาแมตช์
  • log_ipc <counts|verbose> <filter> - ดู การบันทึก Steamworks API

การบันทึก Steamworks API

คำสั่ง log_ipc (ที่ป้อนในคอนโซล Steam) จะเทข้อมูลการเรียก IPC ทั้งหมดที่ดำเนินการไปยังอินเตอร์เฟสภายในของไคลเอนต์ Steam คำสั่งนี้จะรับพารามิเตอร์ตัวกรองได้ ซึ่งสามารถเป็นอินเตอร์เฟสที่คุณสนใจอยากจะตรวจสอบหรือชื่อของกระบวนการก็ได้ โปรดทราบว่า ชื่อที่ให้มาอาจไม่ตรงกับเวอร์ชัน ISteam* แบบ 1:1 เสมอไป แต่โดยปกติแล้วจะใกล้เคียงกันมาก การระบุ "counts" หรือ "verbose" เป็นทางเลือกที่สามารถกระทำได้ โดยค่าเริ่มต้นจะเป็น counts

โดยปกติข้อมูลสตรีมเริ่มต้นจะมีลักษณะคล้ายกับลักษณะดังต่อไปนี้:
00000009 my_exe_name.exe:05 > IClientUser::GetSteamID( ) = [U:2:172006], 00000009 my_exe_name.exe:05 > IClientUser::BLoggedOn( ) = 1, 00000009 my_exe_name.exe:05 > IClientNetworking::IsP2PPacketAvailable( 0, ) = 0, 0, 00000009 my_exe_name.exe:05 > IClientNetworking::IsP2PPacketAvailable( 1, ) = 0, 0, 00000009 my_exe_name.exe:05 > IClientFriends::GetPersonaName( ) = "user", 00000009 my_exe_name.exe:05 > IClientUser::GetSteamID( ) = [U:2:123456],

การตรวจสอบอินเตอร์เฟสเฉพาะเจาะจง

หากคุณกำลังพยายามที่จะติดตามปัญหาที่เฉพาะเจาะจง ให้กรอง log_ipc ให้เหลือแต่อินเตอร์เฟสที่ต้องการ

ตัวอย่าง: log_ipc IClientUser

ตัวอย่างเอาต์พุต:
00000009 my_exe_name.exe:05 > IClientUser::GetSteamID( ) = [U:2:172006], 00000009 my_exe_name.exe:05 > IClientUser::BLoggedOn( ) = 1, 00000009 my_exe_name.exe:05 > IClientUser::GetSteamID( ) = [U:2:123456],

รายงาน IPC

การรายงานแบบโรลอัปพร้อมใช้งานสำหรับคำสั่ง log_ipc ในไคลเอนต์ Steam

การรายงานแบบโรลอัปจะทำให้คุณสามารถดูผลสรุปของการเรียก IPC ได้อย่างรวดเร็ว ตัวอย่างที่แสดงไว้ด้านล่างนี้แสดงให้เห็นว่ากำลังมีการเรียก GetSteamID/BLoggedOn/GetPersonaName บ่อยเกินไป รายงานจะถูกส่งออกมาเมื่อการบันทึกได้ถูกปิดการใช้งานหรือถูกรีสตาร์ท เพราะฉะนั้น ในการที่จะเรียกรายงานด้านล่างนี้ คุณจะต้อง:

  • ป้อน "log_ipc my_exe_name.exe"
  • รอ/โต้ตอบกับเกมเพื่อพยายามที่จะจำลองปัญหาหรือสิ่งอื่นที่ต้องการขึ้นมาอีกครั้ง
  • ป้อน "log_ipc 0"

ตัวอย่างเอาต์พุต:
Calls over the last 42144 milliseconds: Process Method Calls First Last -------------------- ---------------------------------------- ---------- ---------- ------- my_exe_name.exe IClientNetworking::IsP2PPacketAvailable 15272 9 42145 my_exe_name.exe IClientUser::GetSteamID 42652 9 42145 my_exe_name.exe IClientUser::BLoggedOn 42652 9 42145 my_exe_name.exe IClientFriends::GetPersonaName 3820 9 42145 my_exe_name.exe IClientUser::RequestEncryptedAppTicket 2 2103 2441 my_exe_name.exe IClientUtils::GetAPICallResult 2 2125 2441 my_exe_name.exe IClientUser::GetEncryptedAppTicket 1 2136 2136

เอาต์พุตบันทึกล็อก IPC

บันทึก IPC ฉบับเต็มจะส่งไปยังไดเรกทอรีการติดตั้ง Steam ของคุณ: logs\ipc_SteamClient.log