aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview/llwindebug.cpp
diff options
context:
space:
mode:
authorJacek Antonelli2009-05-30 17:16:26 -0500
committerJacek Antonelli2009-05-30 19:12:37 -0500
commit499afbab7be4c4136eea0e1897319c3ac4e9799d (patch)
tree95e9de524994eae69b0dd88b8c6608d5f45d030c /linden/indra/newview/llwindebug.cpp
parentFixed end-of-line style for Info-Imprudence.plist. (diff)
parentSecond Life viewer sources 1.22.11 (diff)
downloadmeta-impy-499afbab7be4c4136eea0e1897319c3ac4e9799d.zip
meta-impy-499afbab7be4c4136eea0e1897319c3ac4e9799d.tar.gz
meta-impy-499afbab7be4c4136eea0e1897319c3ac4e9799d.tar.bz2
meta-impy-499afbab7be4c4136eea0e1897319c3ac4e9799d.tar.xz
Merged SL 1.22.11 into Imprudence 1.1 RC2.
Conflicts: linden/doc/contributions.txt linden/indra/cmake/APR.cmake linden/indra/cmake/CopyWinLibs.cmake linden/indra/cmake/LLKDU.cmake (removed) linden/indra/cmake/LLMedia.cmake linden/indra/cmake/OPENAL.cmake linden/indra/cmake/QuickTime.cmake (removed) linden/indra/develop.py linden/indra/lib/python/indra/base/llsd.py linden/indra/lib/python/indra/util/fastest_elementtree.py linden/indra/lib/python/indra/util/llmanifest.py linden/indra/lib/python/indra/util/named_query.py linden/indra/llaudio/CMakeLists.txt linden/indra/llaudio/audioengine.cpp linden/indra/llaudio/audioengine.h linden/indra/llaudio/audioengine_fmod.cpp linden/indra/llaudio/audioengine_fmod.h linden/indra/llaudio/audioengine_openal.cpp linden/indra/llaudio/audioengine_openal.h linden/indra/llaudio/listener_openal.cpp linden/indra/llaudio/listener_openal.h linden/indra/llaudio/windgen.h linden/indra/llcrashlogger/llcrashlogger.cpp linden/indra/llmedia/llmediaimplgstreamer.cpp linden/indra/llmedia/llmediaimplgstreamer_syms.cpp (removed) linden/indra/llmedia/llmediaimplgstreamer_syms.h (removed) linden/indra/llmessage/llcircuit.h linden/indra/llrender/llgl.cpp linden/indra/llrender/llrender.h linden/indra/llui/llfloater.cpp linden/indra/llui/lltexteditor.cpp linden/indra/llwindow/llwindowsdl.cpp linden/indra/mac_crash_logger/CMakeLists.txt linden/indra/mac_updater/CMakeLists.txt linden/indra/newview/CMakeLists.txt linden/indra/newview/English.lproj/InfoPlist.strings linden/indra/newview/Info-Imprudence.plist linden/indra/newview/installers/windows/installer_template.nsi linden/indra/newview/installers/windows/lang_de.nsi linden/indra/newview/installers/windows/lang_en-us.nsi linden/indra/newview/installers/windows/lang_ja.nsi linden/indra/newview/installers/windows/lang_ko.nsi linden/indra/newview/llappviewer.cpp linden/indra/newview/llaudiosourcevo.cpp linden/indra/newview/llfloaterabout.cpp linden/indra/newview/llfloaterhtml.cpp linden/indra/newview/llfloaterhtml.h linden/indra/newview/llfloaterinspect.cpp linden/indra/newview/llfloatersnapshot.cpp linden/indra/newview/llpanelgeneral.cpp linden/indra/newview/llpanelgeneral.h linden/indra/newview/llpanellogin.cpp linden/indra/newview/llpanelobject.cpp linden/indra/newview/llurlhistory.cpp linden/indra/newview/llviewermenu.cpp linden/indra/newview/llviewernetwork.cpp linden/indra/newview/llviewernetwork.h linden/indra/newview/llviewerobject.cpp linden/indra/newview/llviewerwindow.cpp linden/indra/newview/llvoavatar.cpp linden/indra/newview/res/viewerRes.rc linden/indra/newview/skins/default/xui/de/floater_env_settings.xml linden/indra/newview/skins/default/xui/de/floater_html.xml linden/indra/newview/skins/default/xui/de/floater_inspect.xml linden/indra/newview/skins/default/xui/de/floater_instant_message_group.xml linden/indra/newview/skins/default/xui/de/floater_lagmeter.xml linden/indra/newview/skins/default/xui/de/floater_lsl_guide.xml linden/indra/newview/skins/default/xui/de/floater_url_entry.xml linden/indra/newview/skins/default/xui/de/floater_water.xml linden/indra/newview/skins/default/xui/de/mime_types.xml linden/indra/newview/skins/default/xui/de/need_to_long.xml linden/indra/newview/skins/default/xui/de/need_to_translate.xml linden/indra/newview/skins/default/xui/de/need_to_update.xml linden/indra/newview/skins/default/xui/de/panel_friends.xml linden/indra/newview/skins/default/xui/de/panel_media_remote_expanded.xml linden/indra/newview/skins/default/xui/de/panel_preferences_voice.xml linden/indra/newview/skins/default/xui/de/panel_voice_controls.xml linden/indra/newview/skins/default/xui/de/panel_voice_enable.xml linden/indra/newview/skins/default/xui/de/panel_voice_options.xml linden/indra/newview/skins/default/xui/de/strings.xml linden/indra/newview/skins/default/xui/en-us/floater_chat_history.xml linden/indra/newview/skins/default/xui/en-us/floater_instant_message_ad_hoc.xml linden/indra/newview/skins/default/xui/en-us/floater_instant_message_group.xml linden/indra/newview/skins/default/xui/en-us/floater_lagmeter.xml linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml linden/indra/newview/skins/default/xui/en-us/panel_audio_device.xml linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml linden/indra/newview/skins/default/xui/en-us/panel_preferences_input.xml linden/indra/newview/skins/default/xui/en-us/panel_preferences_voice.xml linden/indra/newview/skins/default/xui/en-us/panel_voice_remote.xml linden/indra/newview/skins/default/xui/en-us/panel_voice_remote_expanded.xml linden/indra/newview/skins/default/xui/es/alerts.xml linden/indra/newview/skins/default/xui/es/floater_about_land.xml linden/indra/newview/skins/default/xui/es/floater_mute.xml linden/indra/newview/skins/default/xui/es/menu_viewer.xml linden/indra/newview/skins/default/xui/es/panel_group_land_money.xml linden/indra/newview/skins/default/xui/es/panel_preferences_general.xml linden/indra/newview/skins/default/xui/fr/alerts.xml linden/indra/newview/skins/default/xui/fr/floater_about.xml linden/indra/newview/skins/default/xui/fr/floater_about_land.xml linden/indra/newview/skins/default/xui/fr/floater_active_speakers.xml linden/indra/newview/skins/default/xui/fr/floater_animation_preview.xml linden/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml linden/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml linden/indra/newview/skins/default/xui/fr/floater_buy_contents.xml linden/indra/newview/skins/default/xui/fr/floater_buy_currency.xml linden/indra/newview/skins/default/xui/fr/floater_buy_land.xml linden/indra/newview/skins/default/xui/fr/floater_buy_object.xml linden/indra/newview/skins/default/xui/fr/floater_chat_history.xml linden/indra/newview/skins/default/xui/fr/floater_color_picker.xml linden/indra/newview/skins/default/xui/fr/floater_customize.xml linden/indra/newview/skins/default/xui/fr/floater_directory.xml linden/indra/newview/skins/default/xui/fr/floater_env_settings.xml linden/indra/newview/skins/default/xui/fr/floater_god_tools.xml linden/indra/newview/skins/default/xui/fr/floater_group_info.xml linden/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml linden/indra/newview/skins/default/xui/fr/floater_html.xml linden/indra/newview/skins/default/xui/fr/floater_image_preview.xml linden/indra/newview/skins/default/xui/fr/floater_import.xml linden/indra/newview/skins/default/xui/fr/floater_instant_message.xml linden/indra/newview/skins/default/xui/fr/floater_instant_message_ad_hoc.xml linden/indra/newview/skins/default/xui/fr/floater_instant_message_group.xml linden/indra/newview/skins/default/xui/fr/floater_inventory.xml linden/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml linden/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml linden/indra/newview/skins/default/xui/fr/floater_joystick.xml linden/indra/newview/skins/default/xui/fr/floater_lagmeter.xml linden/indra/newview/skins/default/xui/fr/floater_land_holdings.xml linden/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml linden/indra/newview/skins/default/xui/fr/floater_media_browser.xml linden/indra/newview/skins/default/xui/fr/floater_moveview.xml linden/indra/newview/skins/default/xui/fr/floater_mute.xml linden/indra/newview/skins/default/xui/fr/floater_mute_object.xml linden/indra/newview/skins/default/xui/fr/floater_name_description.xml linden/indra/newview/skins/default/xui/fr/floater_new_outfit_dialog.xml linden/indra/newview/skins/default/xui/fr/floater_openobject.xml linden/indra/newview/skins/default/xui/fr/floater_pay.xml linden/indra/newview/skins/default/xui/fr/floater_pay_object.xml linden/indra/newview/skins/default/xui/fr/floater_preferences.xml linden/indra/newview/skins/default/xui/fr/floater_preview_animation.xml linden/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml linden/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml linden/indra/newview/skins/default/xui/fr/floater_preview_notecard_keep_discard.xml linden/indra/newview/skins/default/xui/fr/floater_preview_sound.xml linden/indra/newview/skins/default/xui/fr/floater_price_for_listing.xml linden/indra/newview/skins/default/xui/fr/floater_region_info.xml linden/indra/newview/skins/default/xui/fr/floater_report_abuse.xml linden/indra/newview/skins/default/xui/fr/floater_report_bug.xml linden/indra/newview/skins/default/xui/fr/floater_script_ed_panel.xml linden/indra/newview/skins/default/xui/fr/floater_sell_land.xml linden/indra/newview/skins/default/xui/fr/floater_settings_debug.xml linden/indra/newview/skins/default/xui/fr/floater_skin_preview_template.xml linden/indra/newview/skins/default/xui/fr/floater_snapshot.xml linden/indra/newview/skins/default/xui/fr/floater_sound_preview.xml linden/indra/newview/skins/default/xui/fr/floater_telehub.xml linden/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml linden/indra/newview/skins/default/xui/fr/floater_tools.xml linden/indra/newview/skins/default/xui/fr/floater_top_objects.xml linden/indra/newview/skins/default/xui/fr/floater_url_entry.xml linden/indra/newview/skins/default/xui/fr/floater_windlight_options.xml linden/indra/newview/skins/default/xui/fr/floater_world_map.xml linden/indra/newview/skins/default/xui/fr/menu_inventory.xml linden/indra/newview/skins/default/xui/fr/menu_pie_avatar.xml linden/indra/newview/skins/default/xui/fr/menu_pie_land.xml linden/indra/newview/skins/default/xui/fr/menu_pie_self.xml linden/indra/newview/skins/default/xui/fr/menu_viewer.xml linden/indra/newview/skins/default/xui/fr/mime_types.xml linden/indra/newview/skins/default/xui/fr/notify.xml linden/indra/newview/skins/default/xui/fr/panel_audio.xml linden/indra/newview/skins/default/xui/fr/panel_audio_device.xml linden/indra/newview/skins/default/xui/fr/panel_avatar.xml linden/indra/newview/skins/default/xui/fr/panel_avatar_classified.xml linden/indra/newview/skins/default/xui/fr/panel_chat_bar.xml linden/indra/newview/skins/default/xui/fr/panel_classified.xml linden/indra/newview/skins/default/xui/fr/panel_event.xml linden/indra/newview/skins/default/xui/fr/panel_friends.xml linden/indra/newview/skins/default/xui/fr/panel_group.xml linden/indra/newview/skins/default/xui/fr/panel_group_finder.xml linden/indra/newview/skins/default/xui/fr/panel_group_general.xml linden/indra/newview/skins/default/xui/fr/panel_group_invite.xml linden/indra/newview/skins/default/xui/fr/panel_group_land_money.xml linden/indra/newview/skins/default/xui/fr/panel_group_notices.xml linden/indra/newview/skins/default/xui/fr/panel_group_roles.xml linden/indra/newview/skins/default/xui/fr/panel_group_voting.xml linden/indra/newview/skins/default/xui/fr/panel_groups.xml linden/indra/newview/skins/default/xui/fr/panel_login.xml linden/indra/newview/skins/default/xui/fr/panel_master_volume.xml linden/indra/newview/skins/default/xui/fr/panel_media_controls.xml linden/indra/newview/skins/default/xui/fr/panel_media_remote.xml linden/indra/newview/skins/default/xui/fr/panel_media_remote_expanded.xml linden/indra/newview/skins/default/xui/fr/panel_overlaybar.xml linden/indra/newview/skins/default/xui/fr/panel_place.xml linden/indra/newview/skins/default/xui/fr/panel_place_small.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_audio.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_general.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_im.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_input.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_network.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_popups.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_voice.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_web.xml linden/indra/newview/skins/default/xui/fr/panel_region_covenant.xml linden/indra/newview/skins/default/xui/fr/panel_region_debug.xml linden/indra/newview/skins/default/xui/fr/panel_region_estate.xml linden/indra/newview/skins/default/xui/fr/panel_region_general.xml linden/indra/newview/skins/default/xui/fr/panel_region_terrain.xml linden/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml linden/indra/newview/skins/default/xui/fr/panel_speaker_controls.xml linden/indra/newview/skins/default/xui/fr/panel_status_bar.xml linden/indra/newview/skins/default/xui/fr/panel_toolbar.xml linden/indra/newview/skins/default/xui/fr/panel_voice_controls.xml linden/indra/newview/skins/default/xui/fr/panel_voice_enable.xml linden/indra/newview/skins/default/xui/fr/panel_voice_options.xml linden/indra/newview/skins/default/xui/fr/panel_voice_remote_expanded.xml linden/indra/newview/skins/default/xui/fr/role_actions.xml linden/indra/newview/skins/default/xui/fr/strings.xml linden/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml linden/indra/newview/skins/default/xui/ja/floater_inspect.xml linden/indra/newview/skins/default/xui/ja/floater_instant_message_group.xml linden/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml linden/indra/newview/skins/default/xui/ja/floater_media_browser.xml linden/indra/newview/skins/default/xui/ja/floater_mute_object.xml linden/indra/newview/skins/default/xui/ja/floater_url_entry.xml linden/indra/newview/skins/default/xui/ja/need_to_long.xml linden/indra/newview/skins/default/xui/ja/need_to_translate.xml linden/indra/newview/skins/default/xui/ja/need_to_update.xml linden/indra/newview/skins/default/xui/ja/panel_audio.xml linden/indra/newview/skins/default/xui/ja/panel_groups.xml linden/indra/newview/skins/default/xui/ja/panel_preferences_voice.xml linden/indra/newview/skins/default/xui/ja/panel_preferences_web.xml linden/indra/newview/skins/default/xui/ja/strings.xml linden/indra/newview/skins/default/xui/ko/need_to_long.xml linden/indra/newview/skins/default/xui/ko/need_to_translate.xml linden/indra/newview/skins/default/xui/ko/need_to_update.xml linden/indra/newview/skins/default/xui/pt/alerts.xml linden/indra/newview/skins/default/xui/pt/floater_about.xml linden/indra/newview/skins/default/xui/pt/floater_about_land.xml linden/indra/newview/skins/default/xui/pt/floater_animation_preview.xml linden/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml linden/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml linden/indra/newview/skins/default/xui/pt/floater_build_options.xml linden/indra/newview/skins/default/xui/pt/floater_buy_contents.xml linden/indra/newview/skins/default/xui/pt/floater_buy_currency.xml linden/indra/newview/skins/default/xui/pt/floater_buy_land.xml linden/indra/newview/skins/default/xui/pt/floater_buy_object.xml linden/indra/newview/skins/default/xui/pt/floater_chat_history.xml linden/indra/newview/skins/default/xui/pt/floater_color_picker.xml linden/indra/newview/skins/default/xui/pt/floater_customize.xml linden/indra/newview/skins/default/xui/pt/floater_directory.xml linden/indra/newview/skins/default/xui/pt/floater_gesture.xml linden/indra/newview/skins/default/xui/pt/floater_html.xml linden/indra/newview/skins/default/xui/pt/floater_im.xml linden/indra/newview/skins/default/xui/pt/floater_image_preview.xml linden/indra/newview/skins/default/xui/pt/floater_instant_message.xml linden/indra/newview/skins/default/xui/pt/floater_instant_message_ad_hoc.xml linden/indra/newview/skins/default/xui/pt/floater_inventory.xml linden/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml linden/indra/newview/skins/default/xui/pt/floater_joystick.xml linden/indra/newview/skins/default/xui/pt/floater_land_holdings.xml linden/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml linden/indra/newview/skins/default/xui/pt/floater_mute.xml linden/indra/newview/skins/default/xui/pt/floater_new_outfit_dialog.xml linden/indra/newview/skins/default/xui/pt/floater_openobject.xml linden/indra/newview/skins/default/xui/pt/floater_pay.xml linden/indra/newview/skins/default/xui/pt/floater_pay_object.xml linden/indra/newview/skins/default/xui/pt/floater_postcard.xml linden/indra/newview/skins/default/xui/pt/floater_preview_animation.xml linden/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml linden/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml linden/indra/newview/skins/default/xui/pt/floater_preview_notecard_keep_discard.xml linden/indra/newview/skins/default/xui/pt/floater_report_abuse.xml linden/indra/newview/skins/default/xui/pt/floater_report_bug.xml linden/indra/newview/skins/default/xui/pt/floater_script_debug.xml linden/indra/newview/skins/default/xui/pt/floater_script_ed_panel.xml linden/indra/newview/skins/default/xui/pt/floater_snapshot.xml linden/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml linden/indra/newview/skins/default/xui/pt/floater_tools.xml linden/indra/newview/skins/default/xui/pt/floater_top_objects.xml linden/indra/newview/skins/default/xui/pt/floater_tos.xml linden/indra/newview/skins/default/xui/pt/floater_world_map.xml linden/indra/newview/skins/default/xui/pt/menu_inventory.xml linden/indra/newview/skins/default/xui/pt/menu_pie_avatar.xml linden/indra/newview/skins/default/xui/pt/menu_viewer.xml linden/indra/newview/skins/default/xui/pt/notify.xml linden/indra/newview/skins/default/xui/pt/panel_avatar.xml linden/indra/newview/skins/default/xui/pt/panel_avatar_classified.xml linden/indra/newview/skins/default/xui/pt/panel_chat_bar.xml linden/indra/newview/skins/default/xui/pt/panel_classified.xml linden/indra/newview/skins/default/xui/pt/panel_event.xml linden/indra/newview/skins/default/xui/pt/panel_group_general.xml linden/indra/newview/skins/default/xui/pt/panel_group_invite.xml linden/indra/newview/skins/default/xui/pt/panel_group_land_money.xml linden/indra/newview/skins/default/xui/pt/panel_group_notices.xml linden/indra/newview/skins/default/xui/pt/panel_group_roles.xml linden/indra/newview/skins/default/xui/pt/panel_group_voting.xml linden/indra/newview/skins/default/xui/pt/panel_login.xml linden/indra/newview/skins/default/xui/pt/panel_overlaybar.xml linden/indra/newview/skins/default/xui/pt/panel_place.xml linden/indra/newview/skins/default/xui/pt/panel_place_small.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_audio.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_general.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_im.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_input.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_network.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_popups.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_web.xml linden/indra/newview/skins/default/xui/pt/panel_region_covenant.xml linden/indra/newview/skins/default/xui/pt/panel_region_debug.xml linden/indra/newview/skins/default/xui/pt/panel_region_estate.xml linden/indra/newview/skins/default/xui/pt/panel_region_general.xml linden/indra/newview/skins/default/xui/pt/panel_status_bar.xml linden/indra/newview/skins/default/xui/pt/panel_toolbar.xml linden/indra/newview/skins/default/xui/pt/teleport_strings.xml linden/indra/newview/skins/default/xui/zh/floater_account_history.xml linden/indra/newview/skins/default/xui/zh/floater_god_tools.xml linden/indra/newview/skins/default/xui/zh/floater_html.xml linden/indra/newview/skins/default/xui/zh/floater_inspect.xml linden/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml linden/indra/newview/skins/default/xui/zh/floater_preferences.xml linden/indra/newview/skins/default/xui/zh/floater_sell_land.xml linden/indra/newview/skins/default/xui/zh/floater_settings_debug.xml linden/indra/newview/skins/default/xui/zh/menu_pie_attachment.xml linden/indra/newview/skins/default/xui/zh/menu_pie_avatar.xml linden/indra/newview/skins/default/xui/zh/menu_pie_land.xml linden/indra/newview/skins/default/xui/zh/menu_pie_object.xml linden/indra/newview/skins/default/xui/zh/menu_pie_self.xml linden/indra/newview/skins/default/xui/zh/menu_viewer.xml linden/indra/newview/skins/default/xui/zh/need_to_translate.xml linden/indra/newview/skins/default/xui/zh/panel_account_details.xml linden/indra/newview/skins/default/xui/zh/panel_account_planning.xml linden/indra/newview/skins/default/xui/zh/panel_account_transactions.xml linden/indra/newview/skins/default/xui/zh/panel_avatar.xml linden/indra/newview/skins/default/xui/zh/panel_group.xml linden/indra/newview/skins/default/xui/zh/panel_group_finder.xml linden/indra/newview/skins/default/xui/zh/panel_group_general.xml linden/indra/newview/skins/default/xui/zh/panel_group_invite.xml linden/indra/newview/skins/default/xui/zh/panel_group_land_money.xml linden/indra/newview/skins/default/xui/zh/panel_group_notices.xml linden/indra/newview/skins/default/xui/zh/panel_group_roles.xml linden/indra/newview/skins/default/xui/zh/panel_group_voting.xml linden/indra/newview/skins/default/xui/zh/panel_preferences_audio.xml linden/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml linden/indra/newview/skins/default/xui/zh/panel_preferences_im.xml linden/indra/newview/skins/default/xui/zh/panel_preferences_popups.xml linden/indra/newview/skins/default/xui/zh/panel_region_covenant.xml linden/indra/newview/skins/default/xui/zh/strings.xml linden/indra/newview/skins/default/xui/zh/strings_long.xml linden/indra/newview/skins/silver/xui/en-us/floater_about_land.xml linden/indra/newview/skins/silver/xui/en-us/panel_status_bar.xml linden/indra/newview/viewer_manifest.py linden/indra/win_updater/updater.cpp linden/install.xml
Diffstat (limited to 'linden/indra/newview/llwindebug.cpp')
-rw-r--r--linden/indra/newview/llwindebug.cpp356
1 files changed, 264 insertions, 92 deletions
diff --git a/linden/indra/newview/llwindebug.cpp b/linden/indra/newview/llwindebug.cpp
index e48b7bf..129d925 100644
--- a/linden/indra/newview/llwindebug.cpp
+++ b/linden/indra/newview/llwindebug.cpp
@@ -4,7 +4,7 @@
4 * 4 *
5 * $LicenseInfo:firstyear=2004&license=viewergpl$ 5 * $LicenseInfo:firstyear=2004&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2004-2008, Linden Research, Inc. 7 * Copyright (c) 2004-2009, Linden Research, Inc.
8 * 8 *
9 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * The source code in this file ("Source Code") is provided by Linden Lab
@@ -42,6 +42,7 @@
42#pragma warning(disable: 4200) //nonstandard extension used : zero-sized array in struct/union 42#pragma warning(disable: 4200) //nonstandard extension used : zero-sized array in struct/union
43#pragma warning(disable: 4100) //unreferenced formal parameter 43#pragma warning(disable: 4100) //unreferenced formal parameter
44 44
45
45/* 46/*
46LLSD Block for Windows Dump Information 47LLSD Block for Windows Dump Information
47<llsd> 48<llsd>
@@ -120,8 +121,18 @@ MODULE32_NEST Module32Next_;
120#define CALL_TRACE_MAX ((DUMP_SIZE_MAX - 2000) / (MAX_PATH + 40)) //max number of traced calls 121#define CALL_TRACE_MAX ((DUMP_SIZE_MAX - 2000) / (MAX_PATH + 40)) //max number of traced calls
121#define NL L"\r\n" //new line 122#define NL L"\r\n" //new line
122 123
123BOOL WINAPI Get_Module_By_Ret_Addr(PBYTE Ret_Addr, LPWSTR Module_Name, PBYTE & Module_Addr);
124 124
125typedef struct STACK
126{
127 STACK * Ebp;
128 PBYTE Ret_Addr;
129 DWORD Param[0];
130} STACK, * PSTACK;
131
132BOOL WINAPI Get_Module_By_Ret_Addr(PBYTE Ret_Addr, LPWSTR Module_Name, PBYTE & Module_Addr);
133void WINAPI Get_Call_Stack(const EXCEPTION_RECORD* exception_record,
134 const CONTEXT* context_record,
135 LLSD& info);
125 136
126void printError( CHAR* msg ) 137void printError( CHAR* msg )
127{ 138{
@@ -184,69 +195,6 @@ BOOL GetProcessThreadIDs(DWORD process_id, std::vector<DWORD>& thread_ids)
184 return( TRUE ); 195 return( TRUE );
185} 196}
186 197
187void WINAPI GetCallStackData(const CONTEXT* context_struct, LLSD& info)
188{
189 // Fill Str with call stack info.
190 // pException can be either GetExceptionInformation() or NULL.
191 // If pException = NULL - get current call stack.
192
193 LPWSTR Module_Name = new WCHAR[MAX_PATH];
194 PBYTE Module_Addr = 0;
195
196 typedef struct STACK
197 {
198 STACK * Ebp;
199 PBYTE Ret_Addr;
200 DWORD Param[0];
201 } STACK, * PSTACK;
202
203 PSTACK Ebp;
204
205 if(context_struct)
206 {
207 Ebp = (PSTACK)context_struct->Ebp;
208 }
209 else
210 {
211 // The context struct is NULL,
212 // so we will use the current stack.
213 Ebp = (PSTACK)&context_struct - 1;
214
215 // Skip frame of GetCallStackData().
216 if (!IsBadReadPtr(Ebp, sizeof(PSTACK)))
217 Ebp = Ebp->Ebp; //caller ebp
218 }
219
220 // Trace CALL_TRACE_MAX calls maximum - not to exceed DUMP_SIZE_MAX.
221 // Break trace on wrong stack frame.
222 for (int Ret_Addr_I = 0, i = 0;
223 (Ret_Addr_I < CALL_TRACE_MAX) && !IsBadReadPtr(Ebp, sizeof(PSTACK)) && !IsBadCodePtr(FARPROC(Ebp->Ret_Addr));
224 Ret_Addr_I++, Ebp = Ebp->Ebp, ++i)
225 {
226 // If module with Ebp->Ret_Addr found.
227
228 if (Get_Module_By_Ret_Addr(Ebp->Ret_Addr, Module_Name, Module_Addr))
229 {
230 // Save module's address and full path.
231 info["CallStack"][i]["ModuleName"] = ll_convert_wide_to_string(Module_Name);
232 info["CallStack"][i]["ModuleAddress"] = (int)Module_Addr;
233 info["CallStack"][i]["CallOffset"] = (int)(Ebp->Ret_Addr - Module_Addr);
234
235 LLSD params;
236 // Save 5 params of the call. We don't know the real number of params.
237 if (!IsBadReadPtr(Ebp, sizeof(PSTACK) + 5 * sizeof(DWORD)))
238 {
239 for(int j = 0; j < 5; ++j)
240 {
241 params[j] = (int)Ebp->Param[j];
242 }
243 }
244 info["CallStack"][i]["Parameters"] = params;
245 }
246 info["CallStack"][i]["ReturnAddress"] = (int)Ebp->Ret_Addr;
247 }
248}
249
250BOOL GetThreadCallStack(DWORD thread_id, LLSD& info) 198BOOL GetThreadCallStack(DWORD thread_id, LLSD& info)
251{ 199{
252 if(GetCurrentThreadId() == thread_id) 200 if(GetCurrentThreadId() == thread_id)
@@ -271,7 +219,7 @@ BOOL GetThreadCallStack(DWORD thread_id, LLSD& info)
271 context_struct.ContextFlags = CONTEXT_FULL; 219 context_struct.ContextFlags = CONTEXT_FULL;
272 if(GetThreadContext(thread_handle, &context_struct)) 220 if(GetThreadContext(thread_handle, &context_struct))
273 { 221 {
274 GetCallStackData(&context_struct, info); 222 Get_Call_Stack(NULL, &context_struct, info);
275 result = true; 223 result = true;
276 } 224 }
277 ResumeThread(thread_handle); 225 ResumeThread(thread_handle);
@@ -326,35 +274,143 @@ BOOL WINAPI Get_Module_By_Ret_Addr(PBYTE Ret_Addr, LPWSTR Module_Name, PBYTE & M
326 return found; 274 return found;
327} //Get_Module_By_Ret_Addr 275} //Get_Module_By_Ret_Addr
328 276
277bool has_valid_call_before(PDWORD cur_stack_loc)
278{
279 PBYTE p_first_byte = (PBYTE)(*cur_stack_loc - 1);
280 PBYTE p_second_byte = (PBYTE)(*cur_stack_loc -2);
281 PBYTE p_fifth_byte = (PBYTE)(*cur_stack_loc - 5);
282 PBYTE p_sixth_byte = (PBYTE)(*cur_stack_loc - 6);
283
284 // make sure we can read it
285 if(IsBadReadPtr(p_sixth_byte, 6 * sizeof(BYTE)))
286 {
287 return false;
288 }
289
290 // check for 9a + 4 bytes
291 if(*p_fifth_byte == 0x9A)
292 {
293 return true;
294 }
295
296 // Check for E8 + 4 bytes and last byte is 00 or FF
297 if(*p_fifth_byte == 0xE8 && (*p_first_byte == 0x00 || *p_first_byte == 0xFF))
298 {
299 return true;
300 }
301
302 // the other is six bytes
303 if(*p_sixth_byte == 0xFF || *p_second_byte == 0xFF)
304 {
305 return true;
306 }
307
308 return false;
309}
310
311PBYTE get_valid_frame(PBYTE esp)
312{
313 PDWORD cur_stack_loc = NULL;
314 const int max_search = 400;
315 WCHAR module_name[MAX_PATH];
316 PBYTE module_addr = 0;
317
318 // round to highest multiple of four
319 esp = (esp + (4 - ((int)esp % 4)) % 4);
320
321 // scroll through stack a few hundred places.
322 for (cur_stack_loc = (PDWORD) esp; cur_stack_loc < (PDWORD)esp + max_search; cur_stack_loc += 1)
323 {
324 // if you can read the pointer,
325 if (IsBadReadPtr(cur_stack_loc, sizeof(PDWORD)))
326 {
327 continue;
328 }
329
330 // check if it's in a module
331 if (!Get_Module_By_Ret_Addr((PBYTE)*cur_stack_loc, module_name, module_addr))
332 {
333 continue;
334 }
335
336 // check if the code before the instruction ptr is a call
337 if(!has_valid_call_before(cur_stack_loc))
338 {
339 continue;
340 }
341
342 // if these all pass, return that ebp, otherwise continue till we're dead
343 return (PBYTE)(cur_stack_loc - 1);
344 }
345
346 return NULL;
347}
348
349bool shouldUseStackWalker(PSTACK Ebp, int max_depth)
350{
351 WCHAR Module_Name[MAX_PATH];
352 PBYTE Module_Addr = 0;
353 int depth = 0;
354
355 while (depth < max_depth)
356 {
357 if (IsBadReadPtr(Ebp, sizeof(PSTACK)) ||
358 IsBadReadPtr(Ebp->Ebp, sizeof(PSTACK)) ||
359 Ebp->Ebp < Ebp ||
360 Ebp->Ebp - Ebp > 0xFFFFFF ||
361 IsBadCodePtr(FARPROC(Ebp->Ebp->Ret_Addr)) ||
362 !Get_Module_By_Ret_Addr(Ebp->Ebp->Ret_Addr, Module_Name, Module_Addr))
363 {
364 return true;
365 }
366 depth++;
367 Ebp = Ebp->Ebp;
368 }
369
370 return false;
371}
372
329//****************************************************************** 373//******************************************************************
330void WINAPI Get_Call_Stack(PEXCEPTION_POINTERS pException, LLSD& info) 374void WINAPI Get_Call_Stack(const EXCEPTION_RECORD* exception_record,
375 const CONTEXT* context_record,
376 LLSD& info)
331//****************************************************************** 377//******************************************************************
332// Fill Str with call stack info. 378// Fill Str with call stack info.
333// pException can be either GetExceptionInformation() or NULL. 379// pException can be either GetExceptionInformation() or NULL.
334// If pException = NULL - get current call stack. 380// If pException = NULL - get current call stack.
335{ 381{
336 LPWSTR Module_Name = new WCHAR[MAX_PATH]; 382 LPWSTR Module_Name = new WCHAR[MAX_PATH];
337 PBYTE Module_Addr = 0; 383 PBYTE Module_Addr = 0;
338 384 LLSD params;
339 typedef struct STACK 385 PBYTE Esp = NULL;
340 { 386 LLSD tmp_info;
341 STACK * Ebp; 387
342 PBYTE Ret_Addr; 388 bool fake_frame = false;
343 DWORD Param[0]; 389 bool ebp_used = false;
344 } STACK, * PSTACK; 390 const int HEURISTIC_MAX_WALK = 20;
391 int heuristic_walk_i = 0;
392 int Ret_Addr_I = 0;
345 393
346 STACK Stack = {0, 0}; 394 STACK Stack = {0, 0};
347 PSTACK Ebp; 395 PSTACK Ebp;
348 396
349 if (pException) //fake frame for exception address 397 if (exception_record && context_record) //fake frame for exception address
350 { 398 {
351 Stack.Ebp = (PSTACK)pException->ContextRecord->Ebp; 399 Stack.Ebp = (PSTACK)(context_record->Ebp);
352 Stack.Ret_Addr = (PBYTE)pException->ExceptionRecord->ExceptionAddress; 400 Stack.Ret_Addr = (PBYTE)exception_record->ExceptionAddress;
353 Ebp = &Stack; 401 Ebp = &Stack;
402 Esp = (PBYTE) context_record->Esp;
403 fake_frame = true;
404 }
405 else if(context_record)
406 {
407 Ebp = (PSTACK)(context_record->Ebp);
408 Esp = (PBYTE)(context_record->Esp);
354 } 409 }
355 else 410 else
356 { 411 {
357 Ebp = (PSTACK)&pException - 1; //frame addr of Get_Call_Stack() 412 Ebp = (PSTACK)&exception_record - 1; //frame addr of Get_Call_Stack()
413 Esp = (PBYTE)&exception_record;
358 414
359 // Skip frame of Get_Call_Stack(). 415 // Skip frame of Get_Call_Stack().
360 if (!IsBadReadPtr(Ebp, sizeof(PSTACK))) 416 if (!IsBadReadPtr(Ebp, sizeof(PSTACK)))
@@ -363,22 +419,21 @@ void WINAPI Get_Call_Stack(PEXCEPTION_POINTERS pException, LLSD& info)
363 419
364 // Trace CALL_TRACE_MAX calls maximum - not to exceed DUMP_SIZE_MAX. 420 // Trace CALL_TRACE_MAX calls maximum - not to exceed DUMP_SIZE_MAX.
365 // Break trace on wrong stack frame. 421 // Break trace on wrong stack frame.
366 for (int Ret_Addr_I = 0, i = 0; 422 for (Ret_Addr_I = 0;
367 (Ret_Addr_I < CALL_TRACE_MAX) && !IsBadReadPtr(Ebp, sizeof(PSTACK)) && !IsBadCodePtr(FARPROC(Ebp->Ret_Addr)); 423 heuristic_walk_i < HEURISTIC_MAX_WALK &&
368 Ret_Addr_I++, Ebp = Ebp->Ebp, ++i) 424 Ret_Addr_I < CALL_TRACE_MAX && !IsBadReadPtr(Ebp, sizeof(PSTACK)) && !IsBadCodePtr(FARPROC(Ebp->Ret_Addr));
425 Ret_Addr_I++)
369 { 426 {
370 // If module with Ebp->Ret_Addr found. 427 // If module with Ebp->Ret_Addr found.
371
372 if (Get_Module_By_Ret_Addr(Ebp->Ret_Addr, Module_Name, Module_Addr)) 428 if (Get_Module_By_Ret_Addr(Ebp->Ret_Addr, Module_Name, Module_Addr))
373 { 429 {
374 // Save module's address and full path. 430 // Save module's address and full path.
375 info["CallStack"][i]["ModuleName"] = ll_convert_wide_to_string(Module_Name); 431 tmp_info["CallStack"][Ret_Addr_I]["ModuleName"] = ll_convert_wide_to_string(Module_Name);
376 info["CallStack"][i]["ModuleAddress"] = (int)Module_Addr; 432 tmp_info["CallStack"][Ret_Addr_I]["ModuleAddress"] = (int)Module_Addr;
377 info["CallStack"][i]["CallOffset"] = (int)(Ebp->Ret_Addr - Module_Addr); 433 tmp_info["CallStack"][Ret_Addr_I]["CallOffset"] = (int)(Ebp->Ret_Addr - Module_Addr);
378 434
379 LLSD params;
380 // Save 5 params of the call. We don't know the real number of params. 435 // Save 5 params of the call. We don't know the real number of params.
381 if (pException && !Ret_Addr_I) //fake frame for exception address 436 if (fake_frame && !Ret_Addr_I) //fake frame for exception address
382 params[0] = "Exception Offset"; 437 params[0] = "Exception Offset";
383 else if (!IsBadReadPtr(Ebp, sizeof(PSTACK) + 5 * sizeof(DWORD))) 438 else if (!IsBadReadPtr(Ebp, sizeof(PSTACK) + 5 * sizeof(DWORD)))
384 { 439 {
@@ -387,10 +442,64 @@ void WINAPI Get_Call_Stack(PEXCEPTION_POINTERS pException, LLSD& info)
387 params[j] = (int)Ebp->Param[j]; 442 params[j] = (int)Ebp->Param[j];
388 } 443 }
389 } 444 }
390 info["CallStack"][i]["Parameters"] = params; 445 tmp_info["CallStack"][Ret_Addr_I]["Parameters"] = params;
391 } 446 }
392 info["CallStack"][i]["ReturnAddress"] = (int)Ebp->Ret_Addr; 447
448 tmp_info["CallStack"][Ret_Addr_I]["ReturnAddress"] = (int)Ebp->Ret_Addr;
449
450 // get ready for next frame
451 // Set ESP to just after return address. Not the real esp, but just enough after the return address
452 if(!fake_frame) {
453 Esp = (PBYTE)Ebp + 8;
454 }
455 else
456 {
457 fake_frame = false;
458 }
459
460 // is next ebp valid?
461 // only run if we've never found a good ebp
462 // and make sure the one after is valid as well
463 if( !ebp_used &&
464 shouldUseStackWalker(Ebp, 2))
465 {
466 heuristic_walk_i++;
467 PBYTE new_ebp = get_valid_frame(Esp);
468 if (new_ebp != NULL)
469 {
470 Ebp = (PSTACK)new_ebp;
471 }
472 }
473 else
474 {
475 ebp_used = true;
476 Ebp = Ebp->Ebp;
477 }
478 }
479/* TODO remove or turn this code back on to edit the stack after i see a few raw ones. -Palmer
480 // Now go back through and edit out heuristic stacks that could very well be bogus.
481 // Leave the top and the last 3 stack chosen by the heuristic, however.
482 if(heuristic_walk_i > 2)
483 {
484 info["CallStack"][0] = tmp_info["CallStack"][0];
485 std::string ttest = info["CallStack"][0]["ModuleName"];
486 for(int cur_frame = 1;
487 (cur_frame + heuristic_walk_i - 2 < Ret_Addr_I);
488 ++cur_frame)
489 {
490 // edit out the middle heuristic found frames
491 info["CallStack"][cur_frame] = tmp_info["CallStack"][cur_frame + heuristic_walk_i - 2];
492 }
493 }
494 else
495 {
496 info = tmp_info;
393 } 497 }
498*/
499 info = tmp_info;
500 info["HeuristicWalkI"] = heuristic_walk_i;
501 info["EbpUsed"] = ebp_used;
502
394} //Get_Call_Stack 503} //Get_Call_Stack
395 504
396//*********************************** 505//***********************************
@@ -429,7 +538,7 @@ LLSD WINAPI Get_Exception_Info(PEXCEPTION_POINTERS pException)
429 FILETIME Last_Write_Time; 538 FILETIME Last_Write_Time;
430 FILETIME Local_File_Time; 539 FILETIME Local_File_Time;
431 SYSTEMTIME T; 540 SYSTEMTIME T;
432 541
433 Str = new WCHAR[DUMP_SIZE_MAX]; 542 Str = new WCHAR[DUMP_SIZE_MAX];
434 Str_Len = 0; 543 Str_Len = 0;
435 if (!Str) 544 if (!Str)
@@ -439,6 +548,7 @@ LLSD WINAPI Get_Exception_Info(PEXCEPTION_POINTERS pException)
439 548
440 GetModuleFileName(NULL, Str, MAX_PATH); 549 GetModuleFileName(NULL, Str, MAX_PATH);
441 info["Process"] = ll_convert_wide_to_string(Str); 550 info["Process"] = ll_convert_wide_to_string(Str);
551 info["ThreadID"] = (S32)GetCurrentThreadId();
442 552
443 // If exception occurred. 553 // If exception occurred.
444 if (pException) 554 if (pException)
@@ -506,7 +616,7 @@ LLSD WINAPI Get_Exception_Info(PEXCEPTION_POINTERS pException)
506 } //if (pException) 616 } //if (pException)
507 617
508 // Save call stack info. 618 // Save call stack info.
509 Get_Call_Stack(pException, info); 619 Get_Call_Stack(pException->ExceptionRecord, pException->ContextRecord, info);
510 620
511 return info; 621 return info;
512} //Get_Exception_Info 622} //Get_Exception_Info
@@ -552,6 +662,58 @@ void LLMemoryReserve::release()
552 662
553static LLMemoryReserve gEmergencyMemoryReserve; 663static LLMemoryReserve gEmergencyMemoryReserve;
554 664
665#ifndef _M_IX86
666 #error "The following code only works for x86!"
667#endif
668LPTOP_LEVEL_EXCEPTION_FILTER WINAPI MyDummySetUnhandledExceptionFilter(
669 LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter)
670{
671 if(lpTopLevelExceptionFilter == gFilterFunc)
672 return gFilterFunc;
673
674 llinfos << "Someone tried to set the exception filter. Listing call stack modules" << llendl;
675 LLSD cs_info;
676 Get_Call_Stack(NULL, NULL, cs_info);
677
678 if(cs_info.has("CallStack") && cs_info["CallStack"].isArray())
679 {
680 LLSD cs = cs_info["CallStack"];
681 for(LLSD::array_iterator i = cs.beginArray();
682 i != cs.endArray();
683 ++i)
684 {
685 llinfos << "Module: " << (*i)["ModuleName"] << llendl;
686 }
687 }
688
689 return gFilterFunc;
690}
691
692BOOL PreventSetUnhandledExceptionFilter()
693{
694 HMODULE hKernel32 = LoadLibrary(_T("kernel32.dll"));
695 if (hKernel32 == NULL)
696 return FALSE;
697
698 void *pOrgEntry = GetProcAddress(hKernel32, "SetUnhandledExceptionFilter");
699 if(pOrgEntry == NULL)
700 return FALSE;
701
702 unsigned char newJump[ 100 ];
703 DWORD dwOrgEntryAddr = (DWORD)pOrgEntry;
704 dwOrgEntryAddr += 5; // add 5 for 5 op-codes for jmp far
705 void *pNewFunc = &MyDummySetUnhandledExceptionFilter;
706 DWORD dwNewEntryAddr = (DWORD) pNewFunc;
707 DWORD dwRelativeAddr = dwNewEntryAddr - dwOrgEntryAddr;
708
709 newJump[ 0 ] = 0xE9; // JMP absolute
710 memcpy(&newJump[ 1 ], &dwRelativeAddr, sizeof(pNewFunc));
711 SIZE_T bytesWritten;
712 BOOL bRet = WriteProcessMemory(GetCurrentProcess(),
713 pOrgEntry, newJump, sizeof(pNewFunc) + 1, &bytesWritten);
714 return bRet;
715}
716
555// static 717// static
556void LLWinDebug::initExceptionHandler(LPTOP_LEVEL_EXCEPTION_FILTER filter_func) 718void LLWinDebug::initExceptionHandler(LPTOP_LEVEL_EXCEPTION_FILTER filter_func)
557{ 719{
@@ -602,6 +764,9 @@ void LLWinDebug::initExceptionHandler(LPTOP_LEVEL_EXCEPTION_FILTER filter_func)
602 LPTOP_LEVEL_EXCEPTION_FILTER prev_filter; 764 LPTOP_LEVEL_EXCEPTION_FILTER prev_filter;
603 prev_filter = SetUnhandledExceptionFilter(filter_func); 765 prev_filter = SetUnhandledExceptionFilter(filter_func);
604 766
767 // *REMOVE:Mani
768 //PreventSetUnhandledExceptionFilter();
769
605 if(prev_filter != gFilterFunc) 770 if(prev_filter != gFilterFunc)
606 { 771 {
607 LL_WARNS("AppInit") 772 LL_WARNS("AppInit")
@@ -737,3 +902,10 @@ void LLWinDebug::generateCrashStacks(struct _EXCEPTION_POINTERS *exception_infop
737 LLSDSerialize::toPrettyXML(info, out_file); 902 LLSDSerialize::toPrettyXML(info, out_file);
738 out_file.close(); 903 out_file.close();
739} 904}
905
906void LLWinDebug::clearCrashStacks()
907{
908 LLSD info;
909 std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "SecondLifeException.log");
910 LLFile::remove(dump_path);
911}