ฉันจะวินิจฉัย“ มีข้อผิดพลาดในการเปิดแอปพลิเคชัน” ได้อย่างไร?


26

ฉันสร้างmy-app.desktopไฟล์สำหรับโปรแกรมที่ฉันเขียน เมื่อฉันคลิกสองครั้งฉันได้รับข้อความแสดงข้อผิดพลาด " เกิดข้อผิดพลาดในการเปิดแอปพลิเคชัน " ฉันจะรับข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับปัญหาได้อย่างไร

ฉันเห็นการอ้างอิงไปยังส่วน "รายละเอียด" ของกล่องโต้ตอบ แต่ไม่มีอะไรเหมือนในปัจจุบันที่ฉันเห็น ถ้าฉันใช้ Mac ฉันจะเปิดแอพ Console เพื่อดูว่ามีข้อผิดพลาดใด ๆ ที่เข้าสู่ระบบ แต่ฉันไม่ได้เรียนรู้อะไรที่คล้ายกันบน Ubuntu

(โปรดทราบว่าไม่เหมือนคำถามอื่น ๆ ที่มีชื่อคล้ายกันฉันไม่ได้ถามว่าเกิดอะไรขึ้นกับไฟล์ .desktop นี้โดยเฉพาะฉันต้องการทราบวิธีการค้นหาโดยทั่วไป)


1
ฉันจะเรียกใช้ Exec line จากเทอร์มินัลและดูว่าเอาต์พุตแจ้งให้คุณทราบ แต่คุณแน่ใจหรือไม่ว่าไฟล์เดสก์ท็อปนั้นโอเค บางทีคุณควรตรวจสอบและเรียกใช้จากเทอร์มินัลเช่นกัน
Jacob Vlijm

@Jacob หากมีวิธี "เรียกใช้จากเทอร์มินัล" ที่วางบางสิ่งที่มีประโยชน์กับ stderr นั่นจะเป็นคำตอบสำหรับคำถามนี้
Kevin Reid

1
@terdon ฉันลองมันแล้วมันกลับกลายเป็นว่า (เป็นปัญหาต่อไป ) สภาพแวดล้อมนั้นแตกต่างกันไปในลักษณะที่สำคัญ ฉันต้องการทราบวิธีการรับข้อมูลเพิ่มเติมจากกระบวนการเปิดตัวตามปกติเพื่อที่ฉันจะได้ไม่ต้องเดาว่าอะไรแตกต่างกัน
Kevin Reid

2
@terdon สังเกตุการทำงานใน terminal ที่แตกต่างกัน - ฉันพยายามและมันก็แตกต่างกัน (ในที่แตกต่างกันโดยเฉพาะอย่างยิ่งPATH) ฉันต้องการทราบวิธีการรับสภาพแวดล้อมเหมือนกับการเปิดตัวปกติ แต่มีข้อมูลการวินิจฉัยเพิ่มเติม
Kevin Reid

2
เป็นปัญหาเล็กน้อย แต่ 9 เท่าของ 10 ปัญหาที่ออกอากาศว่าเป็นอักขระพิเศษเช่นช่องว่างในExec=เส้นทาง จำไว้ว่าคุณควรมีExec=เครื่องหมายคำพูดและPath=ไม่มีคำพูด
Barafu Albino

คำตอบ:


15

นี่คือเคล็ดลับที่คุณสามารถใช้ได้ สร้างสคริปต์ตัวตัดสำหรับแอปพลิเคชันของคุณที่จะเปิดใช้งานและจับเอาท์พุทข้อผิดพลาด:

#!/usr/bin/env bash

## Launch 'yourapp' and capture its standard error output
/path/to/yourapp 2>~/myapp.log

บันทึกว่าเป็นและทำให้มันปฏิบัติการด้วย~/foo.sh chmod +x ~/foo.shตอนนี้ให้เปิดโปรแกรมเรียกใช้งานเดสก์ท็อปของคุณแทน สิ่งที่ต้องการ:

[Desktop Entry]
Version=2.0
Type=Application
Exec=/home/kevin/foo.sh
Terminal=true
Comment=My app!

ซึ่งจะเปลี่ยนเส้นทางข้อความแสดงข้อผิดพลาดไปที่~/myapp.logและคุณสามารถตรวจสอบได้ในยามว่าง คุณสามารถใช้2>>~/myapp.logหากคุณต้องการให้มีการผนวกข้อความแสดงข้อผิดพลาดต่อเนื่องไปยังไฟล์แทนที่จะเขียนทับมัน


เช่นกันเหตุผลนั้น$PATHจะแตกต่างกันเป็นเพราะคุณอาจจะตั้งค่าของคุณ$PATHใน~/.bahsrcที่ไม่ได้อ่านจากสภาพแวดล้อมแบบกราฟิก เป็นความคิดที่ไม่ดีเนื่องจาก$PATHจะมีการตั้งค่าทุกครั้งที่คุณเปิดเทอร์มินัลใหม่และนั่นเป็นค่าใช้จ่ายที่ไม่จำเป็น ใช้~/.profileสำหรับสิ่งนี้แทน สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับไฟล์ที่อ่านเมื่อดูที่นี่และสำหรับข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ที่ควรจะใช้สำหรับสิ่งที่เห็นที่นี่


ไม่พบปัญหาด้วยวิธีนี้ แต่เสื้อคลุมทำงานได้ดังนั้นฉันจึงเก็บเสื้อคลุมไว้เป็นแฟ้มที่ปฏิบัติการได้
Jānis Elmeris

16

พบคำตอบสำหรับคำถามนี้ได้ที่: https://askubuntu.com/a/836842

ลองสิ่งนี้:

desktop-file-validate my-app.desktop

มันส่งออกข้อผิดพลาดใน.desktopไฟล์ของคุณ ตัวอย่างเช่นฉันกลับมา:

error: first group is not "Desktrop Entry"

ดังนั้นเมื่อฉันแก้ไขการพิมพ์ผิดไปDesktop Entryสคริปต์ก็ทำงานได้สำเร็จ


7

โดยการรันคำสั่งต่อไปนี้ในเทอร์มินัล:

awk -F= '/Exec=/{system($2)}' your_desktop_file.desktop

ฉันแน่ใจว่าคุณจะพบว่ามีข้อผิดพลาดหรือไม่ในคำสั่งของคุณที่กำหนดให้กับExecเขตข้อมูลจากภายในของไฟล์. esktop ของคุณ


5
ฉันมีปัญหาที่คล้ายกัน ฉันรันคำสั่งของคุณและไฟล์ my.desktop ทำงานได้อย่างสมบูรณ์ แต่เมื่อฉันคลิกสองครั้งมันแสดงให้เห็นว่ามีข้อผิดพลาดในการเปิดแอปพลิเคชัน
Sayantan Koley

คำตอบนี้เป็นเรื่องตลกเนื่องจาก (แม้ว่าฉันไม่คิดว่ามันจะทำอะไรได้มากกว่าการใช้ค่าExecในเชลล์) มันทำให้ฉันรู้ว่าคีย์TryExecเป็นปัญหาของฉัน
mirh

3

โดยปกติเทอร์มินัล (-output) จะให้ข้อมูลที่เป็นประโยชน์มากมายแก่คุณทั้งในแอปพลิเคชันและไฟล์บนเดสก์ท็อป ตัวอย่าง: หากฉันเรียกใช้แอปพลิเคชันของฉันจากเทอร์มินัลให้พิมพ์คำสั่งในเทอร์มินัลแอปพลิเคชันจะเริ่มต้นขึ้น

อย่างไรก็ตามหากมีสิ่งผิดปกติคุณสามารถคาดหวังผลลัพธ์เช่น:

Traceback (most recent call last):
  File "/home/jacob/Bureaublad/werkmap_2.0/uploaded_versions/2.1.2/32_en_ppa    /qle-2.1.2/code/qle_quicklisteditor", line 4044, in <module>
    MainWindow()
  File "/home/jacob/Bureaublad/werkmap_2.0/uploaded_versions/2.1.2/32_en_ppa   /qle-2.1.2/code/qle_quicklisteditor", line 51, in __init__
    self.load_sectons()
AttributeError: 'MainWindow' object has no attribute 'load_sectons'
jacob@Jacobwerkkamer:~/Bureaublad/werkmap_2.0/uploaded_versions/2.1.2/32_en_ppa   /qle-2.1.2/code$ 

ซึ่งให้ข้อมูลที่มีประโยชน์มากมายแม้แต่บรรทัดในแอปพลิเคชันของคุณที่ทำให้เกิดข้อผิดพลาด (ฉันทำมันผิดวัตถุประสงค์)

เช่นเดียวกับไฟล์เดสก์ท็อปเพียงแค่เปิดเทอร์มินัลในไดเรกทอรีของไฟล์. เดสก์ท็อปและลากไปยังเทอร์มินัล หากคุณยกตัวอย่างเช่นลบExec=บรรทัดออกจากไฟล์ .desktop เทอร์มินัลจะบอกคุณว่าไม่พบคำสั่งที่จะดำเนินการ

ในการทดสอบว่าแอปพลิเคชันมีข้อผิดพลาดหรือไม่ให้เรียกใช้สิ่งที่คุณใส่หลังจากExec=สตริง

เอาท์พุทเทอร์มักจะเป็นอย่างที่เฉพาะเจาะจงและมีประโยชน์ในการรายงานข้อผิดพลาดชอบที่นี่


2
ฉันรู้เกี่ยวกับวิธีใช้เทอร์มินัลและวิธีแก้ไขปัญหาการเปิดตัวโปรแกรมโดยทั่วไป สมมติว่าวิธีการนี้สิ่งที่ฉันจำเป็นต้องรู้คือวิธีการที่จะทำให้เกิดเงื่อนไขของการเปิดตัวเดสก์ทอปได้อย่างถูกต้องใน terminal
Kevin Reid

0

นี่อาจช่วยคนอื่น - นี่เป็นข้อมูลจำเพาะอย่างเป็นทางการของไฟล์ตัวเรียกใช้งานเดสก์ท็อป

ส่วนที่สำคัญคือ: รายการคีย์เดสก์ท็อปที่รู้จัก - ซึ่งแสดงค่าที่คุณต้องการ


0

เมื่อฉันคิดไม่ออกฉันก็:

cd ~/Desktop
ln -s /my/binary/thatIwanttorun mybinary

จากนั้นคลิกขวาที่ไอคอนเริ่มต้นที่สร้างขึ้นและชี้ไปที่กราฟิกที่ดี


และควรมี <cr> หลังจาก "cd ~ / Desktop"
Tom

-1

สำหรับฉันปัญหาคือIcon=บรรทัดที่หายไป(ซึ่งดูเหมือนว่าเป็นข้อกำหนดโง่ ๆ สำหรับตัวเรียกใช้งานที่ใช้งานได้) ไฟล์ .desktop เต็มของฉันตอนนี้ดูเหมือนว่า:

[Desktop Entry]
Name=LiClipse
Comment=Variant of Eclipse
Exec=/home/tsbertalan/bin/liclipse
Terminal=true
Type=Application
Icon=/home/tsbertalan/usr/liclipse/icon.xpm

ซึ่งไม่แข็งแกร่งโดยเฉพาะการเปลี่ยนแปลงในผู้ใช้ แต่อะไรก็ตาม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.