ภาพรวม
ในช่วงหลายปีที่ผ่านมา 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